首页 文章

如何将张量乘以矩阵

提问于
浏览
2

所以我的数组 A 形状为 [32,60,60] ,数组 B 形状为 [32,60] . 第一个维度是批量大小,因此第一个维度是独立的 . 我想要做的是通过向量乘法的简单矩阵 . 因此,对于 A 中的每个样本,我想将形状矩阵 [60,60] 与形状 [60] 的向量相乘 . 乘以批处理 A * B 应该给我一个形状 [32,60] 的数组 .

这应该很简单,但我做错了:

>>> v = np.matmul(A,B)
ValueError: shapes (32,60,60) and (32,60) not aligned: 60 (dim 2) != 32 (dim 0)

这是针对张量流,但如果我可以转换符号,那么一个笨拙的答案就足够了 .

1 回答

  • 2

    看来你正试图用两个输入数组的最后一个轴 matrix-multiplication . 所以,对于 np.einsum ,它将是 -

    np.einsum('ijk,ik->ij',A,B)
    

    对于 tensorflow ,我们可以使用tf.einsum .


    使用np.matmul,我们需要通过在最后一个轴上引入一个新轴来将 B 扩展为 3D . 因此,使用 np.matmul 将获得 B's 扩展版本 sum-reduced 的第二个轴与 A 的第三个轴 . 结果将是 3D . 因此,使用切片或 np.squeeze 来挤出最后一个单独的轴 . 因此,实施将是 -

    np.matmul(A,B[...,None])[...,0]
    

    我们已经有了tf.matmul函数 .

相关问题