Pytorch 四种边界填充方式(Padding)
1. 选用卷积之前填充(强烈建议)
小生非常推荐大家不再使用卷积所带的填充方式,虽然那种方式简单,但缺陷太多。① 不能根据自己的需要来决定上与下填充不等的边界,左右填充不等的边界;② 边界填充零容易出现伪影的情况,对实验效果影响比较大。将卷积中的Padding方式换为卷积前Padding效果会更佳,以下列了四种填充方式(零填充,常数填充,镜像填充,复制填充)。
小生就不赘言了,客官请下观~~
2. 边界填充之零填充
零填充是常数填充的特例,这种填充方式和卷积中的填充的类似,都是填充零元素,不过这个比卷积填充更灵活,我们可以根据自己的需要再上下左右分别填充相应的0元素。
2.1 Code
import torch
import torch.nn as nn # ================== 零填充 ==================
def conv_ZeroPad2d():
# 定义一个四维数据:(batchSize, channel, height, width)
data = torch.tensor([[[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]]]).float()
print("data_shape: ", data.shape)
print("data: ", data)
# 零填充,在边界填充n个0,分别为:左、右、上、下
ZeroPad = nn.ZeroPad2d(padding=(1, 2, 1, 2))
data1 = ZeroPad(data)
print("data1_shape: ", data1.shape)
print("data1: ", data1) if __name__ == '__main__':
conv_ZeroPad2d()
2.2 结果显示
可以看到,分别在左边填充1列0元素,右边填充2列0元素,上边填充1列0元素,下边填充2列0元素。

3. 边界填充之常数填充
常数填充方式, 可以根据自己的需要在上下左右分别填充指定的元素。
3.1 Code
import torch # ================== 常量填充 ==================
def conv_ConstantPad2d():
# 定义一个四维数据:(batchSize, channel, height, width)
data = torch.tensor([[[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]]]).float()
print("data_shape: ", data.shape)
print("data: ", data)
# 用给定的纸填充,0填充是常亮填充的特列,分别为:左、右、上、下
ConstantPad = nn.ConstantPad2d(padding=(1, 2, 1, 2), value=10)
data1 = ConstantPad(data)
print("data1_shape: ", data1.shape)
print("data1: ", data1) if __name__ == '__main__':
conv_ConstantPad2d()
3.2 结果显示
可以看到,分别在左边填充1列10元素,右边填充2列10元素,上边填充1列10元素,下边填充2列10元素。

4. 边界填充之镜像填充
镜像填充方式是根据对称性来填充的。
4.1 Code
import torch # ================== 镜像填充 ==================
def conv_ReflectionPad2d():
# 定义一个四维数据:(batchSize, channel, height, width)
data = torch.tensor([[[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]]]).float()
print("data_shape: ", data.shape)
print("data: ", data)
# 复制边界n次,分别为:左、右、上、下
ReflectionPad = nn.ReflectionPad2d(padding=(1, 2, 1, 2))
data1 = ReflectionPad(data)
print("data1_shape: ", data1.shape)
print("data1: ", data1) if __name__ == '__main__':
conv_ReflectionPad2d()
4.2 结果显示

5. 边界填充之复制填充
复制填充方式,小生非常推荐。复制填充是复制最外边界的元素来填充,这样填充的元素与边界元素相近,对实验结果的影响会降到最小。
5.1 Code
import torch # ================== 重复填充 ==================
def conv_ReplicationPad2d():
# 定义一个四维数据:(batchSize, channel, height, width)
data = torch.tensor([[[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]]]).float()
print("data_shape: ", data.shape)
print("data: ", data)
# 用对称位置的像素来填充,分别为:左、右、上、下
ReplicationPad = nn.ReplicationPad2d(padding=(1, 2, 1, 2))
data1 = ReplicationPad(data)
print("data1_shape: ", data1.shape)
print("data1: ", data1) if __name__ == '__main__':
conv_ReplicationPad2d()
5.2 结果显示
可以看到,填充的元素与最外边界的元素相同。

6. 总结
努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!
如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)!
Pytorch 四种边界填充方式(Padding)的更多相关文章
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...
- thinkphp四种url访问方式详解
本文实例分析了thinkphp的四种url访问方式.分享给大家供大家参考.具体分析如下: 一.什么是MVC thinkphp的MVC模式非常灵活,即使只有三个中和一个也可以运行. M -Model 编 ...
- ASP.NET MVC下的四种验证编程方式[续篇]【转】
在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...
- ASP.NET MVC下的四种验证编程方式【转】
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...
- thinkPHP四种URL访问方式(二)
原文:thinkPHP四种URL访问方式(二) 四.url的4种访问方式 1.PATHINFO 模式 -- (重点) http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/ ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- 快速理解VirtualBox的四种网络连接方式
VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实他跟VMWare 的网络连接方式都是 ...
- python3+requests:post请求四种传送正文方式(详解)
前言:post请求我在python接口自动化2-发送post请求详解(二)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等,可以参考Get,Post请求方式经典详解进行学习一下. 我 ...
随机推荐
- 弱智破解法——用python破解WIFI
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:李嘉图 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- util.Date与sql.Date的异同以及相互转换
Java中有两个Date类 一个是java.util.Date通常情况下用它获取当前时间或构造时间 另一个是java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分 两个类型的时间 ...
- APP测试和WEB测试区别
App测试web测试的区别 单纯从功能测试的层面上来讲的话,APP 测试.web 测试 在流程和功能测试上是没有区别的 根据两者载体不一样,则区别如下: 1.兼容性测试:web端兼容浏览器,app端兼 ...
- 设计模式 - 模板方法模式详解及其在Spring中的应用
基本介绍 模板方法模式(Template Method Pattern)也叫模板模式,它在一个抽象类中公开定义了执行它的方法的模板,它的字类可以按需重写方法实现,但调用将以抽象类中定义的方式进行. 简 ...
- 新手想掌握Python技能需要众多Python项目练习,适合项目有哪些?
适合新手练习的Python项目有哪些?简单易上手的Python项目汇总:Web 项目设计:内容聚合器.正则表达式查询工具.网址缩短.便利贴.功能.测验.GUI 项目设计:MP3 播放器.闹铃提醒工具. ...
- word2sequence 把字符串转换数字编码
地址:http://ai.stanford.edu/~amaas/data/sentiment/,这是一份包含了5万条流行电影的评论数据,其中训练集25000条,测试集25000条. 1.准备数据 d ...
- Java 创建 Excel 数据透视表
Excel 数据透视表具有强大的数据处理功能,能够使表格中的数据更加直观化.使用Excel 数据透视表,能方便用户快速的排序. 筛选各种数据,同时也能满足用户对不同数据汇总的需求.本文将介绍如何在Ja ...
- 小程序里json字符串转json对象需注意的地方
一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为JSON对象 var obj = eval('(' + str + ') ...
- 20199310《Linux内核原理与分析》第十二周作业
1.问题描述 2014年9月24日,Bash中发现了一个严重漏洞shellshock,该漏洞可用于许多系统,并且既可以远程也可以在本地触发.在本实验中,通过学习重现攻击该漏洞,加深对于ShellSho ...
- java 8 stream reduce详解和误区
目录 简介 reduce详解 总结 java 8 stream reduce详解和误区 简介 Stream API提供了一些预定义的reduce操作,比如count(), max(), min(), ...