猿问

pytorch中卷积中的掩码内核

比方说:


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个掩码实际上是一个与输入形状相同的矩阵。


小唯快跑啊
浏览 208回答 1
1回答

慕桂英546537

我找到了解决方案。在将输入和掩码提供给 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>)
随时随地看视频慕课网APP

相关分类

Python
我要回答