两个4D mat mul numpy,预计输出5D

两个4D mat mul numpy,预计输出5D,numpy,tensorflow,4d,Numpy,Tensorflow,4d,我想用3个过滤器将注意力权重(5个标签)应用到我的卷积中,有谁能帮助我如何应用matmul。如果您也提供tensorflow版本,我们将不胜感激 import numpy as np conv = np.random.randint(10,size=[1,3,2,2], dtype=int) # [batches,filter,row,col] attention = np.random.randint(5,size=[1,5,2,1], dtype=int) # [batches,label,

我想用3个过滤器将注意力权重(5个标签)应用到我的卷积中,有谁能帮助我如何应用matmul。如果您也提供tensorflow版本,我们将不胜感激

import numpy as np
conv = np.random.randint(10,size=[1,3,2,2], dtype=int) # [batches,filter,row,col]
attention = np.random.randint(5,size=[1,5,2,1], dtype=int) # [batches,label,row,col]
np.matmul(conv,attention).shape # expected output size [1,3,5,2,1] [batches,filter,label,row,col]

根据以下文件:

如果任一参数为N-D,N>2,则将其视为驻留在最后两个索引中的矩阵堆栈,并相应地进行广播

矩阵堆栈一起广播,就像矩阵是元素一样

这意味着在您的情况下,除了最后两个维度外,所有维度都需要匹配。如果希望输出形状为
1、3、5、2、1
,则需要在每个数组中显式插入一个空轴。您可以在创建时执行此操作:

import numpy as np conv = np.random.randint(10, size=[1, 3, 1, 2, 2], dtype=int) attention = np.random.randint(5, size=[1, 1, 5,2,1], dtype=int) np.matmul(conv,attention).shape 根据以下文件:

如果任一参数为N-D,N>2,则将其视为驻留在最后两个索引中的矩阵堆栈,并相应地进行广播

矩阵堆栈一起广播,就像矩阵是元素一样

这意味着在您的情况下,除了最后两个维度外,所有维度都需要匹配。如果希望输出形状为
1、3、5、2、1
,则需要在每个数组中显式插入一个空轴。您可以在创建时执行此操作:

import numpy as np conv = np.random.randint(10, size=[1, 3, 1, 2, 2], dtype=int) attention = np.random.randint(5, size=[1, 1, 5,2,1], dtype=int) np.matmul(conv,attention).shape
谢谢,如果可能的话,你能给我更多的选项,比如np.tensordot和np.einsum吗?因为我需要处理更多的过滤器和标签。@user1531248。这将留给读者作为练习。
tensordot
不能很好地控制非求和维度。谢谢,如果可能的话,您可以提供更多选项,如np.tensordot和np.einsum,因为我必须处理更多的过滤器和标签。@user1531248。这将留给读者作为练习。
tensordot
不能很好地控制非求和维度。
dot
matmul
通常涉及一对轴上的求和。从所需的形状看,不清楚是否发生了这种情况。你可以通过广播的元素乘法得到这个形状,而不需要任何求和。
dot
matmul
通常需要在一对轴上求和。从所需的形状看,不清楚是否发生了这种情况。你可以通过广播的元素乘法得到这个形状,而不需要求和。
np.matmul(conv[:, :, np.newaxis, ...], attention[:, np.newaxis, ...]).shape