为了账号安全,请及时绑定邮箱和手机立即绑定

pytorch中卷积中的掩码内核

pytorch中卷积中的掩码内核

小唯快跑啊 2023-07-11 15:07:13
比方说: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>)


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信