Python Tensorflow:三维张量与矩阵的乘积

Python Tensorflow:三维张量与矩阵的乘积,python,tensorflow,Python,Tensorflow,我试图计算三维张量和二维张量之间的点积。我不确定这样做是否正确。具体地说,我想将矩阵[10512]与向量[1512]相乘,但我想寻找一种方法,当有一个三维张量和一个矩阵时,可以有效地实现这一点 f = tf.placeholder(shape = [5, 10, 512], dtype = tf.float32) g = tf.placeholder(shape = [5, 512], dtype = tf.float32) g = tf.expand_dims(g, 1) m = tf.re

我试图计算三维张量和二维张量之间的点积。我不确定这样做是否正确。具体地说,我想将矩阵[10512]与向量[1512]相乘,但我想寻找一种方法,当有一个三维张量和一个矩阵时,可以有效地实现这一点

f = tf.placeholder(shape = [5, 10, 512], dtype = tf.float32)
g = tf.placeholder(shape = [5, 512], dtype = tf.float32)
g = tf.expand_dims(g, 1)

m = tf.reduce_sum( tf.multiply( f, g ), 2 , keep_dims = False )

您可以直接使用矩阵乘法,因为在转置一个向量后,可以将点乘表示为矩阵乘法。所以,在你的情况下,它会是

f = tf.placeholder(shape = [5, 10, 512], dtype = tf.float32)
g = tf.placeholder(shape = [5, 512], dtype = tf.float32)
new_g = tf.expand_dims(g, 2)
m = tf.matmul(f, g)

您可以使用einsum进行此操作。参考资料是:

您可以精确地指定要乘以的元素表达式,并且它适用于任意数量的维度

f = tf.placeholder(shape = [5, 10, 512], dtype=tf.float32)
g = tf.placeholder(shape = [5,512], type = tf.float32)
m = tf.einsum('aij,aj->ai', f, g)
这里a=5,I=10,j=512