PyTorch框架学习七——自定义transforms方法

PyTorch框架学习七——自定义transforms方法

  • 一、自定义transforms注意要素
  • 二、自定义transforms步骤
  • 三、自定义transforms实例:椒盐噪声

虽然前面的笔记介绍了很多PyTorch给出的transforms方法,也非常有用,但是也有可能在具体的问题中需要开发者自定义transforms方法,这次笔记就介绍如何自定义transforms方法。

ps:本次笔记中使用的原始图像出自上次笔记:https://blog.csdn.net/qq_40467656/article/details/107958492

一、自定义transforms注意要素

从数据读取机制DataLoader我们知道了transforms的内部工作原理,是在Compose类的__call__函数定义并实现的:

class Compose(object):"""Composes several transforms together.Args:transforms (list of ``Transform`` objects): list of transforms to compose.Example:>>> transforms.Compose([>>>     transforms.CenterCrop(10),>>>     transforms.ToTensor(),>>> ])"""def __init__(self, transforms):self.transforms = transformsdef __call__(self, img):for t in self.transforms:img = t(img)return img

由此出发,可以看出自定义transforms需要注意两个要素:

  1. 仅接收一个参数img,并返回一个参数img;
  2. transforms之间要注意上下游的输入与输出的格式匹配。

二、自定义transforms步骤

首先,自定义的transforms的输入参数可能不只img一个,如概率p等等,但是原来的代码只允许接收一个参数返回一个参数,所以可以在原来的基础上改进:

class YourTransforms(object):def __init__(self, ...):  # ...是要传入的多个参数# 对多参数进行传入# 如 self.p = p 传入概率# ...def __call__(self, img):  # __call__函数还是只有一个参数传入# 该自定义transforms方法的具体实现过程# ...return img

步骤如下:

  1. 自定义一个类YourTransforms,结构类似Compose类
  2. __init__函数作为多参数传入的地方
  3. __call__函数具体实现自定义的transforms方法

三、自定义transforms实例:椒盐噪声

椒盐噪声:又称为脉冲噪声,是一种随机出现的白点或黑点,白点被称为盐噪声,黑点被称为椒噪声,其与信噪比(SNR)息息相关。

此外,我们还想加入概率p这个参数,实现随机添加椒盐噪声。

仿照实现步骤,先写出其实现的大致框架:

class AddPepperNoise(object):def __init__(self, snr, p):  # snr, p 是要传入的多个参数self.snr = snrself.p = p def __call__(self, img):  # __call__函数还是只有一个参数传入'''添加椒盐噪声的具体实现过程'''return img

完整实现代码:

class AddPepperNoise(object):"""增加椒盐噪声Args:snr (float): Signal Noise Ratep (float): 概率值,依概率执行该操作"""def __init__(self, snr, p=0.9):assert isinstance(snr, float) and (isinstance(p, float))self.snr = snrself.p = pdef __call__(self, img):"""Args:img (PIL Image): PIL ImageReturns:PIL Image: PIL image."""if random.uniform(0, 1) < self.p:img_ = np.array(img).copy()h, w, c = img_.shapesignal_pct = self.snrnoise_pct = (1 - self.snr)mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[signal_pct, noise_pct/2., noise_pct/2.])mask = np.repeat(mask, c, axis=2)img_[mask == 1] = 255   # 盐噪声img_[mask == 2] = 0     # 椒噪声return Image.fromarray(img_.astype('uint8')).convert('RGB')else:return img

添加椒盐噪声之后:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国芯片简史:军方大力扶持下的产物 但一度被日 韩超越

来源&#xff1a;知乎专栏腾讯科技近日发起系列策划&#xff0c;聚焦各个芯片大国的发展历程。第四期&#xff1a;《美国芯片简史》。集成电路是电子信息产业的的基石&#xff0c;电子信息产业对国民经济与社会发展具有重大推动作用。从全球集成电路产业发展历程来看&#xff0…

PyTorch框架学习八——PyTorch数据读取机制(简述)

PyTorch框架学习八——PyTorch数据读取机制&#xff08;简述&#xff09;一、数据二、DataLoader与Dataset1.torch.utils.data.DataLoader2.torch.utils.data.Dataset三、数据读取整体流程琢磨了一段时间&#xff0c;终于对PyTorch的数据读取机制有了一点理解&#xff0c;并自己…

报告 | 2019年全球数字化转型现状研究报告

来源&#xff1a;Prophet2019年&#xff0c;战略数字化转型的重要性已经不止于IT领域&#xff0c;而影响着全公司的竞争力。企业的相关预算直线攀升&#xff0c;利益相关方所关注的颠覆性技术数量急剧增加。数字化项目开始由首席高管主导&#xff0c;并由相互协作的跨职能团队管…

Android调用binder实现权限提升-android学习之旅(81)

当进程A权限较低&#xff0c;而B权限较高时&#xff0c;容易产生提权漏洞 fuzz测试的测试路径 First level Interface是服务 Second level Interface是服务中对应的接口 1.首先获取第一层和第二层接口&#xff0c;及服务以及对应服务提供的接口 2.根据以上信息结合参数类型信息…

PyTorch框架学习九——网络模型的构建

PyTorch框架学习九——网络模型的构建一、概述二、nn.Module三、模型容器Container1.nn.Sequential2.nn.ModuleList3.nn.ModuleDict()4.总结笔记二到八主要介绍与数据有关的内容&#xff0c;这次笔记将开始介绍网络模型有关的内容&#xff0c;首先我们不追求网络内部各层的具体…

中国17种稀土有啥军事用途?没它们,美军技术优势将归零

来源&#xff1a;陶慕剑观察 稀土就是化学元素周期表中镧系元素——镧(La)、铈(Ce)、镨(Pr)、钕(Nd)、钷(Pm)、钐(Sm)、铕(Eu)、钆(Gd)、铽(Tb)、镝(Dy)、钬(Ho)、铒(Er)、铥(Tm)、镱(Yb)、镥(Lu)&#xff0c;再加上钪(Sc)和钇(Y)共17种元素。中国稀土占据着众多的世界第一&…

PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)

PyTorch框架学习十——基础网络层&#xff08;卷积、转置卷积、池化、反池化、线性、激活函数&#xff09;一、卷积层二、转置卷积层三、池化层1.最大池化nn.MaxPool2d2.平均池化nn.AvgPool2d四、反池化层最大值反池化nn.MaxUnpool2d五、线性层六、激活函数层1.nn.Sigmoid2.nn.…

PyTorch框架学习十一——网络层权值初始化

PyTorch框架学习十一——网络层权值初始化一、均匀分布初始化二、正态分布初始化三、常数初始化四、Xavier 均匀分布初始化五、Xavier正态分布初始化六、kaiming均匀分布初始化前面的笔记介绍了网络模型的搭建&#xff0c;这次将介绍网络层权值的初始化&#xff0c;适当的初始化…

W3C 战败:无权再制定 HTML 和 DOM 标准!

来源&#xff1a;CSDN历史性时刻&#xff01;——近日&#xff0c;W3C正式宣告战败&#xff1a;HTML和DOM标准制定权将全权移交给浏览器厂商联盟WHATWG。由苹果、Google、微软和Mozilla四大浏览器厂商组成的WHATWG已经与万维网联盟&#xff08;World Wide Web Consortium&#…

PyTorch框架学习十二——损失函数

PyTorch框架学习十二——损失函数一、损失函数的作用二、18种常见损失函数简述1.L1Loss&#xff08;MAE&#xff09;2.MSELoss3.SmoothL1Loss4.交叉熵CrossEntropyLoss5.NLLLoss6.PoissonNLLLoss7.KLDivLoss8.BCELoss9.BCEWithLogitsLoss10.MarginRankingLoss11.HingeEmbedding…

化合物半导体的机遇

来源&#xff1a;国盛证券半导体材料可分为单质半导体及化合物半导体两类&#xff0c;前者如硅&#xff08;Si&#xff09;、锗(Ge&#xff09;等所形成的半导体&#xff0c;后者为砷化镓&#xff08;GaAs&#xff09;、氮化镓&#xff08;GaN&#xff09;、碳化硅&#xff08;…

PyTorch框架学习十三——优化器

PyTorch框架学习十三——优化器一、优化器二、Optimizer类1.基本属性2.基本方法三、学习率与动量1.学习率learning rate2.动量、冲量Momentum四、十种常见的优化器&#xff08;简单罗列&#xff09;上次笔记简单介绍了一下损失函数的概念以及18种常用的损失函数&#xff0c;这次…

最全芯片产业报告出炉,计算、存储、模拟IC一文扫尽

来源&#xff1a;智东西最近几年&#xff0c; 半导体产业风起云涌。 一方面&#xff0c; 中国半导体异军突起&#xff0c; 另一方面&#xff0c; 全球产业面临超级周期&#xff0c;加上人工智能等新兴应用的崛起&#xff0c;中美科技摩擦频发&#xff0c;全球半导体现状如何&am…

python向CSV文件写内容

f open(r"D:\test.csv", w) f.write(1,2,3\n) f.write(4,5,6\n) f.close() 注意&#xff1a;上面例子中的123456这6个数字会分别写入不同的单元格里&#xff0c;即以逗号作为分隔符将字符串内容分开放到不同单元格 上面例子的图&#xff1a; 如果要把变量的值放入…

PyTorch框架学习十四——学习率调整策略

PyTorch框架学习十四——学习率调整策略一、_LRScheduler类二、六种常见的学习率调整策略1.StepLR2.MultiStepLR3.ExponentialLR4.CosineAnnealingLR5.ReduceLRonPlateau6.LambdaLR在上次笔记优化器的内容中介绍了学习率的概念&#xff0c;但是在整个训练过程中学习率并不是一直…

JavaScript数组常用方法

转载于:https://www.cnblogs.com/kenan9527/p/4926145.html

蕨叶形生物刷新生命史,动物界至少起源于5.7亿年前

来源 &#xff1a;newsweek.com根据发表于《古生物学》期刊&#xff08;Palaeontology&#xff09;的一项研究&#xff0c;动物界可能比科学界所知更加古老。研究人员发现&#xff0c;一种名为“美妙春光虫”&#xff08;Stromatoveris psygmoglena&#xff09;的海洋生物在埃迪…

PyTorch框架学习十五——可视化工具TensorBoard

PyTorch框架学习十五——可视化工具TensorBoard一、TensorBoard简介二、TensorBoard安装及测试三、TensorBoard的使用1.add_scalar()2.add_scalars()3.add_histogram()4.add_image()5.add_graph()之前的笔记介绍了模型训练中的数据、模型、损失函数和优化器&#xff0c;下面将介…

CNN、RNN、DNN的内部网络结构有什么区别?

来源&#xff1a;AI量化百科神经网络技术起源于上世纪五、六十年代&#xff0c;当时叫感知机&#xff08;perceptron&#xff09;&#xff0c;拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层&#xff0c;在输出层得到分类结果。早期感知机的推动者是…

L2级自动驾驶量产趋势解读

来源&#xff1a;《国盛计算机组》L2 级自动驾驶离我们比想象的更近。18 年下半年部分 L2 车型已面世&#xff0c;凯迪拉克、吉利、长城、长安、上汽等均已推出了 L2 自动驾驶车辆。国内目前在售2872个车型&#xff0c;L2级功能渗透率平均超过25%&#xff0c;豪华车甚至超过了6…