2017-10-24 29 views
0

サイズ[batch_size、m、n]のバッチ処理された行列Xにサイズ[n、l]の行列Yを掛けたいとします。どうすればよいですか?Tensorflowバッチ行列の乗算

私はmatmulを使うことはできないようです。これを行うためのきちんとした方法はありますか?

ありがとうございます!

答えて

1

あなたが式ijk,kl->ijltf.einsumを使用することができ、すなわち、XとYの最初の次元の最後の次元を乗算し、それを超える合計:

x = np.arange(12).astype(np.int32).reshape(2,3,2) 
y = np.arange(6).astype(np.int32).reshape(2,3) 
​ 
X = tf.constant(x) 
Y = tf.constant(y) 

with tf.Session() as sess: 
    print(sess.run(tf.einsum('ijk,kl->ijl', X, Y))) 
#[[[ 3 4 5] 
# [ 9 14 19] 
# [15 24 33]] 

# [[21 34 47] 
# [27 44 61] 
# [33 54 75]]] 

numpyからの対応する溶液:

x @ y 
#array([[[ 3, 4, 5], 
#  [ 9, 14, 19], 
#  [15, 24, 33]], 

#  [[21, 34, 47], 
#  [27, 44, 61], 
#  [33, 54, 75]]], dtype=int32) 

np.dot(x, y) 
#array([[[ 3, 4, 5], 
#  [ 9, 14, 19], 
#  [15, 24, 33]], 

#  [[21, 34, 47], 
#  [27, 44, 61], 
#  [33, 54, 75]]], dtype=int32)