Pytorch入门-Transforms

文章目录

  • Compose
  • ToTensor
  • Normalize
  • Resize

在PyTorch中,transforms是一个用于图像预处理和数据增强的模块,通常与torchvision库一起使用。torchvision提供了大量预先定义的transforms,它们可以方便地应用于图像数据,以进行预处理或增强。这些transforms对于训练和评估机器学习模型(尤其是深度学习模型)非常有用。

python中的call方法
在Python中,__call__ 是一个特殊方法,也被称为“魔法方法”或“双下划线方法”。当一个对象实例被当作函数一样调用时,Python会自动调用该对象的 __call__ 方法。这意味着你可以定义你自己的对象,使其能够被“调用”,就像调用一个函数一样。

class Person:def __call__(self,name):print("__call__"+"Hello"+name)def hello(self,name):print("hello"+name)person = Person()
person("zhangsan")
person.hello("lisi")

image

class CallableClass:  def __init__(self, value):  self.value = value  def __call__(self, *args, **kwargs):  print(f"Called with {args} and {kwargs}")  return self.value  # 创建一个实例  
obj = CallableClass(42)  # 使用该实例,就像调用一个函数一样  
result = obj(1, 2, 3, a=4, b=5)  print(result)  # 输出: 42

Compose

在PyTorch中,Compose是一个功能强大的工具,它允许你将多个转换(transforms)组合成一个单一的转换序列。这样,你就可以一次性地对数据进行一系列复杂的预处理操作。Compose通常与torchvision.transforms模块一起使用,该模块提供了许多预定义的转换函数。

from torchvision import transforms  # 定义一系列的转换  
transform_sequence = transforms.Compose([  transform1,  transform2,  transform3,  # ...  
])  # 然后你可以将这个转换序列应用于图像  
transformed_image = transform_sequence(image)
from torchvision import transforms  
from PIL import Image  # 加载一张图像  
image = Image.open('path_to_image.jpg')  # 定义转换序列  
transform = transforms.Compose([  transforms.Resize((256, 256)),  # 将图像大小调整为256x256  transforms.CenterCrop(224),     # 从中心裁剪出224x224的区域  transforms.ToTensor(),           # 将PIL图像或NumPy ndarray转换为torch.Tensor  transforms.Normalize(           # 对图像进行标准化  mean=[0.485, 0.456, 0.406], # 使用ImageNet数据集上的RGB通道的均值  std=[0.229, 0.224, 0.225]   # 使用ImageNet数据集上的RGB通道的标准差  )  
])  # 应用转换序列到图像  
transformed_image = transform(image)

在这个例子中,我们首先使用Resize将图像大小调整为256x256,然后使用CenterCrop从中心裁剪出224x224的区域。接着,使用ToTensor将图像转换为PyTorch张量,最后使用Normalize对图像进行标准化处理。所有这些转换都被组合在一起,并通过一次调用transform(image)来应用。

ToTensor

image

这是transforms源码中的解释

在PyTorch中是一个常用的转换函数,用于将PIL Image或NumPy ndarray转换为torch.Tensor。但是,在转换过程中,它会自动将图像的像素值范围从[0, 255]缩放到[0.0, 1.0]。这通常是因为神经网络的输入通常期望在[0.0, 1.0]范围内。

from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")
imge_path = "images/OIP.jpg"
imge = Image.open(imge_path)
trans_totensor = transforms.ToTensor()
# 这是就是call函数的调用
imge_tensor = trans_totensor(imge)writer.add_image("ToTensor",imge_tensor)
writer.close()

Normalize

image
归一化公式:
o u t p u t [ c h a n n e l ] = ( i n p u t [ c h a n n e l ] − m e a n [ c h a n n e l ] ) s t d [ c h a n n e l ] output[channel] = \frac{(input[channel] - mean[channel])}{std[channel]} output[channel]=std[channel](input[channel]mean[channel])

from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")
imge_path = "images/OIP.jpg"
imge = Image.open(imge_path)# ToTensor
trans_totensor = transforms.ToTensor()
imge_tensor = trans_totensor(imge)
writer.add_image("ToTensor", imge_tensor)print(imge_tensor[0][0][0])
# Normalize
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(imge_tensor)
print(img_norm[0][0][0])
writer.add_image("Norm",img_norm)writer.close()

可以看出来归一化的结果还是有些不同的
image

Resize

# Resize
print(imge.size)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(imge)print(img_resize)
img_resize=trans_totensor(img_resize)
writer.add_image("Resize",img_resize,0)writer.close()

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

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

相关文章

突破内网限制,自由访问 NAS:网络穿透方案大合集! | 开源日报 No.199

anderspitman/awesome-tunneling Stars: 12.2k License: NOASSERTION awesome-tunneling 是一个列出 ngrok 替代方案和其他类似 ngrok 的隧道软件和服务的项目,重点是自托管。 主要面向自托管者和开发人员。提供注册域名并将记录自动指向运行隧道的服务器。自动设…

疯狂数钞票H5游戏

移动端微信h5 <template><div class"container" id"container"><div class"regBag"></div><div class"moneyBox"><transitionv-for"(item,index) in showImgList":key"index"…

这个班要不还是别上了吧。

先不提代码写得对不对。咱就是说&#xff0c;打印语句都出不来&#xff0c;搞个chuanchuan哟。 &#xff08;谁能给我解释一下。。&#x1f643;&#xff09;

Linux命令-cupsenable命令(启动指定的打印机)

说明 cupsenable命令 用于启动指定的打印机。 语法 cupsenable(选项)(参数)选项 -E&#xff1a;当连接到服务器时强制使用加密&#xff1b; -U&#xff1a;指定连接服务器时使用的用户名&#xff1b; -u&#xff1a;指定打印任务所属的用户&#xff1b; -h&#xff1a;指定…

芯片架构设计及其作用

芯片架构设计是芯片流片前很重要的一个环节&#xff0c;俗称pre-silicon&#xff0c;芯片架构设计的好坏&#xff0c;决定了芯片产品的质量&#xff0c;决定了芯片产品是否易用&#xff0c;决定了芯片产品的性能&#xff0c;决定了芯片产品在市场上是否具有持久性。芯片生产是个…

MySQL的常用函数

MySQL函数 聚合函数时间函数字符集函数数学函数其他函数 聚合函数 函数名说明COUNT()统计个数SUM()总和&#xff0c;不是数字没有意义AVG()求平均值&#xff0c;不是数字没有意义MAX()求最大值&#xff0c;不是数字没有意义MIN()求最小值&#xff0c;不是数字没有意义 group …

公众号怎么转移主体

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;长期以来&#xff0c;由于部分公众号在注册时&#xff0c;主体不准确的历史原因&#xff0c;或者公众号主体发生合并、分立或业务调整等现实状况&#xff0c;在公众号登记主体不能对应实际运营人的情况下&#xff0…

Android Selinux详解[五]--新增hal服务标签相关

在工作过程中&#xff0c;SElinux常用的有以下几个文件可用于新增标签 可用于加标签的文件名含义对应的声明文件名(一般会声明的地方&#xff0c;根本上放哪里都可以)file_contexts给 文件/目录/节点 新增标签file.tegenfs_contexts给节点新增标签&#xff0c;与上一个不同的是…

matlab+yalmip调试问题指南

很多同学在应用matlab编写程序过程中会遇到各种报错信息&#xff0c;本文整理了部分应用yalmip及求解器优化过程中遇到的常见部分问题及实用解决办法&#xff0c;供大家参考&#xff0c;更多报错及解决办法会持续更新&#xff0c;谢谢关注&#xff01; 序号问题/方法报错详情1…

反极域控制篇(二)

好的&#xff0c;上一篇介绍了如何破掉极域的控网&#xff0c;这期说说如何退掉锁屏。 分三种情况&#xff1a; 一、投老师的屏幕 点击最左上角的按钮&#xff08;就是能下拉选项缩放显示什么的那个&#xff09;&#xff0c;选择最中间的选项&#xff0c;然后点旁边的鸟什么图…

阿里云服务器ECS--安全,稳定,购买灵活,低成本

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如ECS经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云服务器网al…

基于Spring Boot的疗养院管理系统的设计与实现

传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装疗养院管理系统软件来发挥其高效地信息处理的作用&#xff0c;可以…

Verovio简介及在Windows10和Ubuntu 22.04上编译过程

Verovio是一个快速、便携、轻量级的开源库&#xff0c;用于将音乐编码倡议(Music Encoding Initiative(MEI))数字乐谱雕刻到SVG图像中。Verovio还包含即时转换器(on-the-fly converters)用于渲染Plaine & Easie Code、Humdrum、Musedata、MusicXML、EsAC和ABC数字乐谱。源代…

零知识玩转AVH(4)—— 怎么玩(3)

接前一篇文章&#xff1a;零知识玩转AVH&#xff08;3&#xff09;—— 怎么玩&#xff08;2&#xff09; 上一回讲解了“arm-avh-best-practice-project-product-subscription-guide-cn.pdf”即“Arm虚拟硬件实践专题一&#xff1a;产品订阅指南&#xff08;百度智能云版&…

python爬虫(9)之requests模块

1、获取动态加载的数据 1、在开发者工具中查看动态数据 找到csdn的门户的开发者工具后到这一页面。 2、加载代码 import requests headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36…

2024阿里技术官重磅推出“Java进阶必备宝典” 5大专题 6000字解析

5.JVM实战 CPU占用过高案例实战 内存占用过高案例实战 15种方式编写高效优雅Java程序实战 6.JVM底层技术 亿级流量高井发下GC预估与调优 JHSDB工具透视L ambda底层实现 JVM(HotSpot)核心源码解读 JVM核心模块(GC算法)手写实战 核心三&#xff1a;网络编程与高效IO 1.网络…

如何写出让同事骂娘的代码?教你20个小妙招

在 GitHub 上有一个项目&#xff0c;它描述了「最佳垃圾代码」的十九条关键准则。从变量命名到注释编写&#xff0c;这些准则将指导你写出最亮眼的烂代码。 为了保持与原 GitHub 项目一致的风格&#xff0c;下文没有进行转换。读者们可以以相反的角度来理解所有观点&#xff0…

django根据时间(年月日)动态修改表名--方法二

方法一&#xff1a; 第一步&#xff1a;在models创建一个类&#xff0c;里边存放数据表中需要的字段&#xff0c;如下 class TemplateModel(models.Model):NowTime models.CharField(max_length5)name models.CharFiedld(max_length5)class Meta:abstract True # 基础类设…

每日一题 第三期 洛谷 国王游戏

[NOIP2012 提高组] 国王游戏 题目描述 恰逢 H 国国庆&#xff0c;国王邀请 n n n 位大臣来玩一个有奖游戏。首先&#xff0c;他让每个大臣在左、右手上面分别写下一个整数&#xff0c;国王自己也在左、右手上各写一个整数。然后&#xff0c;让这 n n n 位大臣排成一排&…

<video>标签相关属性

src&#xff1a;指定视频文件的URL。 autoplay&#xff1a;如果设置该属性&#xff0c;视频将在页面加载后自动播放。请注意&#xff0c;一些浏览器可能会因为用户体验的考虑而忽略此属性。 controls&#xff1a;添加此属性将在视频上显示播放、暂停和音量控制等标准控件。 …