PyTorch之填充操作

 1.介绍

    在使用PyTorch深度学习框架的时候,我们经常会遇到padding操作,比如下面:

torch.nn.Conv2d(in_channels, mid_channels, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))

   在此操作中,填充值默认为0,那么PyTorch具体支持那几种常用的padding操作呢?

   1)零填充:周围补0,其调用函数为 torch.nn.ZeroPad2d

   2)常数填充:周围补常数,零填充是其特殊情况,其调用函数为 torch.nn.ConstantPad2d

   3)镜像填充:根据边缘进行镜像对称填充(看下面的代码就比较好理解),其调用函数为 torch.nn.ReflectionPad2d

   4)重复填充:直接用边缘来填充,其调用函数为 torch.nn.ReplicationPad2d

2.代码

    其具体代码:

import torch

src = torch.arange(9).reshape(1, 1, 3, 3).type(torch.FloatTensor)
print(src.cpu().numpy())


zeroPad2d = torch.nn.ZeroPad2d(2)
dst = zeroPad2d(src)
print(dst.cpu().numpy())

constantPad2d = torch.nn.ConstantPad2d(2, value=2)
dst = constantPad2d(src)
print(dst.cpu().numpy())

reflectionPad = torch.nn.ReflectionPad2d(2)
dst = reflectionPad(src)
print(dst.cpu().numpy())

replicationPad2d = torch.nn.ReplicationPad2d(2)
dst = replicationPad2d(src)
print(dst.cpu().numpy())

    其输出:

[[[[0. 1. 2.]
   [3. 4. 5.]
   [6. 7. 8.]]]]
[[[[0. 0. 0. 0. 0. 0. 0.]
   [0. 0. 0. 0. 0. 0. 0.]
   [0. 0. 0. 1. 2. 0. 0.]
   [0. 0. 3. 4. 5. 0. 0.]
   [0. 0. 6. 7. 8. 0. 0.]
   [0. 0. 0. 0. 0. 0. 0.]
   [0. 0. 0. 0. 0. 0. 0.]]]]
[[[[2. 2. 2. 2. 2. 2. 2.]
   [2. 2. 2. 2. 2. 2. 2.]
   [2. 2. 0. 1. 2. 2. 2.]
   [2. 2. 3. 4. 5. 2. 2.]
   [2. 2. 6. 7. 8. 2. 2.]
   [2. 2. 2. 2. 2. 2. 2.]
   [2. 2. 2. 2. 2. 2. 2.]]]]
[[[[8. 7. 6. 7. 8. 7. 6.]
   [5. 4. 3. 4. 5. 4. 3.]
   [2. 1. 0. 1. 2. 1. 0.]
   [5. 4. 3. 4. 5. 4. 3.]
   [8. 7. 6. 7. 8. 7. 6.]
   [5. 4. 3. 4. 5. 4. 3.]
   [2. 1. 0. 1. 2. 1. 0.]]]]
[[[[0. 0. 0. 1. 2. 2. 2.]
   [0. 0. 0. 1. 2. 2. 2.]
   [0. 0. 0. 1. 2. 2. 2.]
   [3. 3. 3. 4. 5. 5. 5.]
   [6. 6. 6. 7. 8. 8. 8.]
   [6. 6. 6. 7. 8. 8. 8.]
   [6. 6. 6. 7. 8. 8. 8.]]]]

3.扩展应用

    据说在图像增强和生成图像领域,卷积运算中的零填充会产生伪影,最好是改成先镜像填充,然后无零填充的卷积运算

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值