【问题标题】:tensorflow - multiply a vector of matrices against each matrix in another vectortensorflow - 将一个矩阵向量与另一个向量中的每个矩阵相乘
【发布时间】:2019-02-23 17:19:25
【问题描述】:

如果我有两个张量 - A 形状为 [4,3,3]B 形状为 [2,3,3]。对于 A 中的每个 [3,3] 矩阵,我想与 B 中的每个 [3,3] 矩阵相乘以生成形状为 [4,2,3,3] 的张量 C .

如何在 Tensorflow 中做到这一点?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    你可以使用tf.einsum('ikl,jkl->ijkl', A, B):

    例子:

    A = tf.reshape(tf.range(36), [4,3,3])
    B = tf.reshape(tf.range(18), [2,3,3])
    tf.einsum('ikl,jkl->ijkl', A, B)
    # <tf.Tensor 'einsum/transpose_2:0' shape=(4, 2, 3, 3) dtype=int32>
    

    【讨论】:

    • 除了乘法之外,其他算术运算符是否有类似的方法?假设我想添加 A 和 B。
    • 你可以先将Areshape成(4,1,3,3),然后加上A和B。tf.reshape(A, [4,1,3,3]) + B,它使用广播属性来做到这一点。
    【解决方案2】:

    您可以为此操作取消堆叠它们:

    A = tf.reshape(tf.range(36), [4,3,3])
    B = tf.reshape(tf.range(18), [2,3,3])
    AB=[tf.matmul(i,j) for i in tf.unstack(A,int(A.shape[0]),0) for j in tf.unstack(B,int(B.shape[0]),0)]
    AB=tf.reshape(tf.stack(output,0),[4,2,3,3])
    

    【讨论】:

      最近更新 更多