0

我想用 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]

ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (1,3,2,2)->(1,3,2,newaxis,2) (1,5,2,1)->(1,5,newaxis,1,2) 
4

1 回答 1

2

根据以下文档matmul

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

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

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

将 numpy 导入为 np
conv = np.random.randint(10, size=[1, 3, 1, 2, 2], dtype=int)
注意 = np.random.randint(5, size=[1, 1, 5,2,1], dtype=int)
np.matmul(conv,attention).shape

或者,您可以通过将视图与适当的插入相乘来使插入显式:

np.matmul(conv[:, :, np.newaxis, ...], attention[:, np.newaxis, ...]).shape
于 2018-11-30T19:28:03.853 回答