Tensorflow:3d张量和矩阵之间的乘法

时间:2018-04-15 23:13:27

标签: python tensorflow

我正在尝试计算3d张量和2d张量之间的点积。我不确定这是否是正确的方法。具体来说,我想将矩阵[10,512]与向量[1,512]相乘,但是当有一个3d张量和矩阵时,我想找到一种有效的方法。

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 )

2 个答案:

答案 0 :(得分:0)

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

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)

答案 1 :(得分:0)

你可以使用einsum。参考文献是:

https://www.tensorflow.org/api_docs/python/tf/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