2017-05-31 17 views
0

テンソル形式で表現された積み重ねた行列を掛けたい。 2および5は、バッチの大きさテンソルフローのテンソル演算でテンソルをブロードキャストする方法はありますか?

tensor.shape == [2,5,7,6] 

tensor2.shape == [5,6,8]

5は、バッチサイズです。 numpyので

、tensor2が自動的ので、私は簡単np.matmul(tensor,tensor2)

しかしtensorflowにを使用することができ、[2,5,7,6]テンソル

にブロードキャストされ、エラーが発生します。

私はtf.expand_dims(tensor2,0)を試してみましたが、これも

tensorflowにテンソルを放送するどのような方法があるが動作しませんか?

答えて

1

あなたはtf.einsumを使用することができます。

tf.einsum('abij,bjk->abik', tensor, tensor2) 

例:

import tensorflow as tf 
x = tf.zeros((2, 5, 7, 6)) 
y = tf.zeros((5, 6, 8)) 
z = tf.einsum('abij,bjk->abik', x, y) 
z.shape.as_list() 
# returns [2, 5, 7, 8] 
+0

私はこれを試してみましたが、2,7,8のテンソルの形でこの結果は私がそこに欠場たのでしょうか? – bj1123

+0

私は分かりません - 私はあなたがチェックするための小さな例を追加しました。 – user1735003

1

このような問題に対処する最も一般的かつ適切な方法は、tf.einsumを使用することです。この関数を使用すると、テンソルの任意の次元で動作するように発明されたEinstein notationを使用して乗算ルールを直接指定することができます。