【问题标题】:Numpy/Tensorflow: Multiplying each depth-wise vector of 3D tensor by a 2D matrixNumpy/Tensorflow:将 3D 张量的每个深度向量乘以 2D 矩阵
【发布时间】:2018-06-02 12:56:33
【问题描述】:
我有一个 4x4x256 张量和一个 128x256 矩阵。我需要将张量的每个 256-d 深度向量乘以矩阵,从而得到一个 4x4x128 张量。
在 Numpy 中工作,我不清楚如何做到这一点。在它们目前的形状中,看起来不存在任何np.dot 的变体来执行此操作。操纵形状以利用广播规则似乎并没有提供任何帮助。 np.tensordot 和 np.einsum 可能有用,但查看文档让我头疼。
有没有有效的方法来做到这一点?
【问题讨论】:
标签:
python
numpy
tensorflow
matrix-multiplication
【解决方案1】:
您可以使用np.einsum 来执行此操作。一个随机值的例子:
a = np.arange(4096.).reshape(4,4,256)
b = np.arange(32768.).reshape(128,256)
c = np.einsum('ijk,lk->ijl',a,b)
print(c.shape)
这里,subscripts 参数是:ijk,lk->ijl
根据您的要求,i=4, j=4, k=256, l=128
逗号分隔两个操作数的下标,下标表示应该在每个张量中的最后一个下标(下标k,这两个张量共有)执行乘法运算。
-> 之后的张量下标表明生成的张量应具有 (i,j,l) 的形状。现在,根据您执行的操作类型,您可能必须保留此下标或将此下标更改为 jil,但 subscripts 的其余部分保持不变。