比方说:x = torch.arange(16, dtype=torch.float).reshape(1, 1, 4, 4)二维卷积层是:layer = torch.nn.Conv2d(in_channels=1, out_channels=1, kernel_size=2, stride=2)layer.weight.data[:] = 1.layer.bias.data[:] = 0.通常,将x传递给图层将给出:>>layer(x) tensor([[[[10., 18.], [42., 50.]]]], grad_fn=<MkldnnConvolutionBackward>)考虑到有 4 个掩模过滤器,如何在每一步中掩模内核?例如下图表示4个过滤器(白色:True,黑色:False)输出应该是:tensor([[[[5., 15.],
[30., 40.]]]], grad_fn=<MkldnnConvolutionBackward>)PS:所有掩模都是通过二维输入数组中缺失的像素获得的。所以上面的4个掩码实际上是一个与输入形状相同的矩阵。
1 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
我找到了解决方案。
在将输入和掩码提供给 Conv2d 方法之前,在输入和掩码之间进行按元素相乘就足够了。(掩码输入比掩码内核本身容易得多!!):
mask = torch.tensor([[[1, 1, 1, 0]], [[1, 0, 1, 1]], [[1, 1, 0, 1]], [[0, 1, 1, 1]]], dtype=torch.float, requires_grad=False).reshape(1, 1, 4, 4)
>>layer(torch.mul(x, mask))
tensor([[[[5., 15.],
[30., 40.]]]], grad_fn=<MkldnnConvolutionBackward>)
添加回答
举报
0/150
提交
取消