Pytorch四种填充模式详解

作者: 小墨 分类: 深度学习 发布时间: 2021-08-20 11:37 访问量:13,252
FavoriteLoading收藏

Torch在做二维卷积或者一维卷积的时候,有四种常用的填充方式,即torch.nn.Conv2D(padding_model=”zeros”),下面进行详细的介绍。

首先生成一个tensor矩阵:
x=nn.Parameter(torch.reshape(torch.range(1,9),(1,1,3,3)))
x的结果为:tensor([[[[1., 2., 3.],
          [4., 5., 6.],
          [7., 8., 9.]]]], requires_grad=True) 

下面在(1,1)的卷积核,padding=1的前提下,使用不同的填充方式进行对比分析。

1、zeros

‘zeros’填充是比较常用的填充方法,在矩阵的每个维度两边用0进行填充。

tensor([[[[0., 0., 0., 0., 0.],
          [0., 1., 2., 3., 0.],
          [0., 4., 5., 6., 0.],
          [0., 7., 8., 9., 0.],
          [0., 0., 0., 0., 0.]]]], grad_fn=<ThnnConv2DBackward>)

2、reflect

‘reflect’是以矩阵的边缘为对称轴,进行填充。

tensor([[[[5., 4., 5., 6., 5.],
          [2., 1., 2., 3., 2.],
          [5., 4., 5., 6., 5.],
          [8., 7., 8., 9., 8.],
          [5., 4., 5., 6., 5.]]]], grad_fn=<ThnnConv2DBackward>)

3、replicate

‘replicate’是将矩阵的边缘复制进行填充。

tensor([[[[1., 1., 2., 3., 3.],
          [1., 1., 2., 3., 3.],
          [4., 4., 5., 6., 6.],
          [7., 7., 8., 9., 9.],
          [7., 7., 8., 9., 9.]]]], grad_fn=<ThnnConv2DBackward>)

4、circular

‘circular’就是从上到下,从左到右循环复制填充。

tensor([[[[9., 7., 8., 9., 7.],
          [3., 1., 2., 3., 1.],
          [6., 4., 5., 6., 4.],
          [9., 7., 8., 9., 7.],
          [3., 1., 2., 3., 1.]]]], grad_fn=<ThnnConv2DBackward>)

如果将Padding设置为3,则:

tensor([[[[1., 2., 3., 1., 2., 3., 1., 2., 3.],
          [4., 5., 6., 4., 5., 6., 4., 5., 6.],
          [7., 8., 9., 7., 8., 9., 7., 8., 9.],
          [1., 2., 3., 1., 2., 3., 1., 2., 3.],
          [4., 5., 6., 4., 5., 6., 4., 5., 6.],
          [7., 8., 9., 7., 8., 9., 7., 8., 9.],
          [1., 2., 3., 1., 2., 3., 1., 2., 3.],
          [4., 5., 6., 4., 5., 6., 4., 5., 6.],
          [7., 8., 9., 7., 8., 9., 7., 8., 9.]]]],
       grad_fn=<ThnnConv2DBackward>)

可以看到前者是后者的截取。

     

如果觉得小墨的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论