我想将一个带有维度[batch_size,m,n]的批量矩阵X与一个大小为[n,l]的矩阵Y相乘,我该怎么做?
看起来我不能只使用matmul。有没有一个巧妙的方法来做到这一点?
谢谢!
答案 0 :(得分:2)
您可以将tf.einsum
与等式ijk,kl->ijl
一起使用,即将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)