Tensorflow批量矩阵乘法

时间:2017-10-24 02:54:22

标签: tensorflow

我想将一个带有维度[batch_size,m,n]的批量矩阵X与一个大小为[n,l]的矩阵Y相乘,我该怎么做?

看起来我不能只使用matmul。有没有一个巧妙的方法来做到这一点?

谢谢!

1 个答案:

答案 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)