2017-02-14 1 views
2

私は次の2つのtensorflowオブジェクトを有するテンソルフロー:バッチ(サイズB X DIMの行列)と語彙(サイズV X DIMの行列)のL1差を計算する方法は?

batch = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3,2], name='batch') 
vocab = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0,1.0,2.0,3.0,4.0,5.0,6.0], shape=[6,2], name='vocab') 

バッチ3つのベクトル、2次元のそれぞれを有しています。 vocabには6つのベクトルがあり、それぞれ2つの次元があります。 可能なすべてのベクトルのペア(18個の値を生成する)のL1の差を計算したいと思います。例: [1,2]のL1の相違は

|1-1|+|2-2|, |1-3|+|2-4|, |1-5|+|2-6|, |1-1|+|2-2|, |1-3|+|2-4|, |1-5|+|2-6|, 

テンソルフロー関数でこれを行うことができますか?得られたマトリックスは、6×3(バッチXのvocab)であり得る。行列の乗算は、行列の期待される次数を生成する計算のようです。しかし、行列乗算の基本的な演算を無効にする方法はありますか? (すなわち、差の絶対値による成分ごとの乗算のオーバーライド)?

+0

これは放送に関するトピック(numpyなど)です。あなたはこれをチェックアウトすることができます:https://www.tensorflow.org/versions/r1.0/experimental/xla/broadcasting。私はまだこれを試していない(あなたはそれが実験的であることに気付くだろう)。 – 0Tech

+0

'*'の代わりに 'tf.matmul'を使いましたか? – drpng

+0

@drpng、ありがとう。私はそれを試みたが、うまくいかなかった。 – Trojosh

答えて

2

このレスポンスはあなたにはもう役に立たないかもしれませんが、最近私はL1とL2の距離のあるk-nearest neighborsというこの例に遭遇しました。 だから、私は推測し、あなたの問題を解決することができるように:

batch = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3,2], name='batch') 
vocab = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0,1.0,2.0,3.0,4.0,5.0,6.0], shape=[6,2], name='vocab') 
distance_L1 = tf.reduce_sum(tf.abs(tf.subtract(vocab, tf.expand_dims(batch,1))), axis=2) 

幸運!

関連する問題