首页 文章

N-D张量矩阵乘以张量流

提问于
浏览
1

考虑我有一组向量 A ,我想将 A 中的每个向量与张量 T 相乘,最终得到一个张量 y ,其中每个切片矩阵是 AT 的向量 v 的乘法结果:

如果 X 只包含一个向量,则以下代码有效(感谢matmul function for vector with tensor multiplication in tensorflow中的答案):

tf.reduce_sum(tf.expand_dims(v,2)*T,1)

但如果 X 由几个向量组成,乘法代码怎么样?

例如,我有 A (带有 2 向量)和 T 的以下值:

A = tf.constant([1,2,3,4], shape=[2,2], dtype=tf.float32) #v1 =[1,2], v2=[3,4]
T = tf.constant([1,2,3,4,5,6,7,8], shape=[2,2,2], dtype=tf.float32)

我希望通过将 A 乘以 T 得到以下输出:

[[[ 7. 10.]
  [19. 22.]]

 [[15. 22.]
  [43. 50.]]]

这个问题的一个应用就是线性回归 y = AX +b 中的批量梯度下降,其中我有一组向量但是我没有训练一个权重矩阵 X ,我想训练一个张量 T ,所以输出 y 将是一个张量张量中的每个矩阵是输入向量乘以 T 的输出 .

注意,通常当我们将维度 1*n 的向量 v 与维度 m*n*k 的张量 T 相乘时,我们期望得到维度 m*k/m*1*k 的矩阵/张量 . 这意味着我们的张量具有维数 n*k 的矩阵切片,并且 v 乘以每个矩阵并且所得到的矢量堆叠在一起 .

1 回答

  • 1

    试试tf.tensordot

    tf.tensordot(A, T, axes=[-1, -2])
    

    要么,

    tf.squeeze(tf.tensordot(A[:, None], T, axes=[2, 1]))
    

    eval '这给了

    array([[[ 7., 10.],
            [19., 22.]],
    
           [[15., 22.],
            [43., 50.]]], dtype=float32)
    

相关问题