数据预处理 —— padding数据
1. 论Conv2d()里的padding和Conv2d()前padding的区别及重要性。
小生建议,尽量少用Conv2d()里的填充方式,换成自定义填充方式(强烈建议)。
小生为何这样建议呢,是因为小生以前就常使用Conv2d()里的padding方式,觉得这样使用简单、不麻烦(O(∩_∩)O哈哈~ 感觉当时好憨哟!)。可是在某一次实验中,得到的效果图在边缘位置十分不理想,我想啊想,想啊想,图像边缘位置我只做过零填充,当时就引起了我的注意,然后通过做对比实验,发现问题还真是由零填充导致的,太开心了(*^▽^*),实验又有突破了。这次不在卷积时做零填充,换成卷积前做重复填充。什么是重复填充了?就是复制边缘的像素来填充。
Conv2d()里的padding,采用的是零填充,即在图像像素周围填充零像素点,这样做的坏处是很可能在边缘处产生伪影。还有一点就是Pytorch中Conv2d()卷积,当卷积核的尺寸是偶数时,不好做‘same’方式卷积,因为Conv2d()在填充时,上边缘与下边缘填充数是一样的,很难改变。
Conv2d()前的padding,可以根据自己的需求填充,目前有四种填充方式,① 零填充;② 常数填充;③ 镜像填充;④ 重复填充;这种方式比较灵活,也很简单,客观可以根据自己的需求来选择使用,四种填充方式,可查看小生的另一篇博文。
小生就不多言了,上案列,客官请下观~~。
2. 例子
2.1 Conv2d()零填充
2.1.1 Code
小生在这里给了代码片段,这里就是想告诉客官怎么做卷积的填充。
# 读取图片
image1_path = "./fusion_datasets/lytro-01-A.jpg"
image1 = Image.open(image1_path) # 归一化处理和转为tensor
input_transform = transforms.Compose([
transforms.Grayscale(1),
transforms.ToTensor(),
]) image1_tensor = input_transform(image1).unsqueeze(0) # 卷积
conv2 = nn.Conv2d(1, 3, 8,padding = 4)
image1_conv = conv2(image1_pad)
2.1.2 结果显示
客官勿怪,此图是我的实验,过程中的图,还没做到最好的效果,O(∩_∩)O哈哈~,有点不好意思了,捂脸(*/ω\*)!客官请看边缘处,是不是很多白点,这都是零填充导致的效果不好,将这张图和自定义填充之边缘填充的图对照。

2.2 自定义填充之边缘复制填充
2.2.1 Code
小生在这里给了代码片段,这里就是想告诉客官怎么做卷积前的填充。
# 读取图片
image1_path = "./fusion_datasets/lytro-01-A.jpg"
image1 = Image.open(image1_path) # 归一化处理和转为tensor
input_transform = transforms.Compose([
transforms.Grayscale(1),
transforms.ToTensor(),
]) image1_tensor = input_transform(image1).unsqueeze(0) # 自定义填充之边缘复制填充
ReplicationPad = nn.ReplicationPad2d(padding=(3, 4, 3, 4))
image1_pad = ReplicationPad(image1_tensor) # 卷积
conv2 = nn.Conv2d(1, 3, 8)
image1_conv = conv2(image1_pad)
2.2.2 结果显示
此图与上图对照,边缘的白点基本没有了,嘿嘿(*^▽^*),好开心(*^▽^*)!

3. 总结
努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!
如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)!
数据预处理 —— padding数据的更多相关文章
- 第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)
前言 这部分也许是数据预处理最为关键的一个阶段. 如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析. 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA),并给 ...
- 数据预处理之数据规约(Data Reduction)
数据归约策略 数据仓库中往往具有海量的数据,在其上进行数据分析与挖掘需要很长的时间 数据归约 用于从源数据中得到数据集的归约表示,它小的很多,但可以产生相同的(几乎相同的)效果 数据归约策略 维归约 ...
- c++ 数据预处理(数据去噪,归一化)
正态分布3σ原则,把3倍方差之外的点设想为噪声数据来排除. 归一化,将数据经过处理之后限定到一定的范围内,一般都会将数据限定到[0,1]. #include <iostream>#incl ...
- R语言--数据预处理
一.日期时间.字符串的处理 日期 Date: 日期类,年与日 POSIXct: 日期时间类,精确到秒,用数字表示 POSIXlt: 日期时间类,精确到秒,用列表表示 Sys.date(), date( ...
- WEKA中的数据预处理
数据预处理包括数据的缺失值处理.标准化.规范化和离散化处理. 数据的缺失值处理:weka.filters.unsupervised.attribute.ReplaceMissingValues. 对于 ...
- R语言数据预处理
R语言数据预处理 一.日期时间.字符串的处理 日期 Date: 日期类,年与日 POSIXct: 日期时间类,精确到秒,用数字表示 POSIXlt: 日期时间类,精确到秒,用列表表示 Sys.date ...
- 小白学 Python 数据分析(9):Pandas (八)数据预处理(2)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- TensorLayer官方中文文档1.7.4:API – 数据预处理
所属分类:TensorLayer API - 数据预处理¶ 我们提供大量的数据增强及处理方法,使用 Numpy, Scipy, Threading 和 Queue. 不过,我们建议你直接使用 Tens ...
- TensorFlow从1到2(三)数据预处理和卷积神经网络
数据集及预处理 从这个例子开始,相当比例的代码都来自于官方新版文档的示例.开始的几个还好,但随后的程序都将需要大量的算力支持.Google Colab是一个非常棒的云端实验室,提供含有TPU/GPU支 ...
随机推荐
- PDF阅读器
1.SumatraPDF 非常小巧,打开很轻快 2.PDF Reader by Xodo window商店中可以找到,很好用 3. PDFXChange Editor这是我迄今为止见过的最好的PDF编 ...
- C++ 11 +,开坑。
最近换新工作了.工作中需要用到高端的c++11的一些操作,至于我后面又plus一下还是因为可能是c++14或者17中提供的一些操作.反正都是c++11以及之后的一些特性. 首先,今天看一下关于函数模板 ...
- async,await执行流看不懂?看完这篇以后再也不会了
昨天有朋友在公众号发消息说看不懂await,async执行流,其实看不懂太正常了,因为你没经过社会的毒打,没吃过牢饭就不知道自由有多重要,没生过病就不知道健康有多重要,没用过ContinueWith就 ...
- 【08NOIP提高组】笨小猴
笨 小 猴 来自08年NOIP提高组的第一题 1.题目描述 [题目描述] 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头痛.经实验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体 ...
- 7.关于一些dom&&获取元素
1. 测试点击的是否是span 标签 <span onClick={this.select.bind(this)}>点击</span> select( e ){ cons ...
- net core天马行空系列:降低net core门槛,数据库操作和http访问仅需写接口,实现类由框架动态生成
引文 hi,大家好,我是三合.不知各位有没有想过,如果能把数据库操作和http访问都统一封装成接口(interface)的形式, 然后接口对应的实现类由框架去自动生成,那么必然能大大降低工作量,因 ...
- 形象地展示信号与系统中的一些细节和原理——卷积、复数、傅里叶变换、拉普拉斯变换、零极图唯一确定因果LTI系统
看懂本文需要读者具备一定的微积分基础.至少开始学信号与系统了本文主要讲解欧拉公式.傅里叶变换的频率轴的负半轴的意义.傅里叶变换的缺陷.为什么因果LTI系统可以被零极图几乎唯一确定等等容易被初学者忽略但 ...
- mongoDB(一)——mongoDB安装部署和常用shell命令
1.mongoDB简介 mongoDB 是由C++语言编写的,是一种分布式的面向文档存储的开源nosql数据库.nosql是Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统 ...
- SVM家族(一)
SVM家族简史 故事要从20世纪50年代说起,1957年,一个叫做感知器的模型被提出, 1963年, Vapnikand Chervonenkis, 提出了最大间隔分类器,SVM诞生了. 1992年, ...
- Python大数据与机器学习之NumPy初体验
本文是Python大数据与机器学习系列文章中的第6篇,将介绍学习Python大数据与机器学习所必须的NumPy库. 通过本文系列文章您将能够学到的知识如下: 应用Python进行大数据与机器学习 应用 ...