0
サイズ[batch_size、m、n]のバッチ処理された行列Xにサイズ[n、l]の行列Yを掛けたいとします。どうすればよいですか?Tensorflowバッチ行列の乗算
私はmatmulを使うことはできないようです。これを行うためのきちんとした方法はありますか?
ありがとうございます!
サイズ[batch_size、m、n]のバッチ処理された行列Xにサイズ[n、l]の行列Yを掛けたいとします。どうすればよいですか?Tensorflowバッチ行列の乗算
私はmatmulを使うことはできないようです。これを行うためのきちんとした方法はありますか?
ありがとうございます!
あなたが式ijk,kl->ijl
でtf.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)