我正在尝试计算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 )
答案 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