Pytorch学习:torchvison.transforms常用包(ToTensor、Resize、Compose和RandomCrop)
torchvision.transforms常用包
- 1. torchvision.transforms.ToTensor
- 2. torchvision.transforms.Resize
- 3. torchvision.transforms.Compose
- 4. torchvision.transforms.Normalize
- 5. torchvision.transforms.RandomCrop
1. torchvision.transforms.ToTensor
将PIL Image或ndarray转换为张量并相应缩放值。
官方文档:torchvision.transforms.ToTensor
CLASS torchvision.transforms.ToTensor
- 将PIL Image或ndarray转换为张量并相应缩放值
- 此转换不支持torchscript
- 如果PIL Image属于其中一种模式(L、LA、P、I、F、RGB、YCbCr、RGBA、CMYK、1)或numpy. ndarray的dtype = np.uint8,则将范围[0,255]的PIL Image或numpy.ndarray(H x W x C)转换为范围[0.0,1.0]的形状(C x H x W)的火炬.FloatTensor
- 在其他情况下,张量在不缩放的情况下返回。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor, 0)writer.close()
2. torchvision.transforms.Resize
将输入图像的大小调整为给定大小。
如果图像是torch tensor,则预期其具有[…,H,W]形状,其中…表示任意数量的前导维度。
官方文档:torchvision.transforms.Resize
CLASS torchvision.transforms.Resize(size, interpolation=InterpolationMode.BILINEAR, max_size=None, antialias='warn')
主要参数:
- size(sequence or int):所需的输出大小。
- 如果size是一个类似(h,w)的序列,则输出size将与此匹配。
- 如果size是一个整数,图像的较小边缘将与此数字匹配。即,如果高度>宽度,则图像将被重新缩放为(尺寸 * 高度/宽度,尺寸)。
- interpolation(InterpolationMode):所需插值枚举。
- max_size(int,可选):调整大小后的图像的最大长边,如果在根据 size 调整大小之后图像的较长边缘大于 max_size ,则再次调整图像的大小,使得较长边缘等于 max_size 。
- antialias(bool,optional):是否应用抗锯齿。它只影响具有双线性或双三次模式的张量,否则将被忽略。在PIL图像上,抗锯齿始终应用于双线性或双三次模式;在其他模式下(对于PIL图像和张量),抗锯齿没有意义,并且忽略此参数。(当前默认值为 None )可能的值为:
- True :将为双线性或双三次模式应用抗锯齿。其他模式不受影响。这可能是你想要使用的。
- False :在任何模式下都不会对张量应用抗锯齿。PIL图像在双线性或双三次模式下仍然是抗锯齿的,因为PIL不支持抗锯齿。
- None :相当于张量的 False 和PIL图像的 True 。这个值的存在是由于遗留的原因,除非您真正知道自己在做什么,否则您可能不想使用它。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)# Resize
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 2)
print(img_resize)writer.close()
3. torchvision.transforms.Compose
将多个变换组合在一起。
官方文档: torchvision.transforms.Compose
CLASS torchvision.transforms.Compose(transforms)
- transforms(list of Transform objects)-要组合的变换列表
代码实现
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)# Compose - resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Compose", img_resize_2, 3)writer.close()
4. torchvision.transforms.Normalize
使用均值和标准差归一化张量图像。此转换不支持PIL图像。
给定平均值: (mean[1],…,mean[n]) 和标准值: (std[1],…,std[n]) 对于 n 通道,该变换将归一化输入 torch.*Tensor 的每个通道,即, output[channel] = (input[channel] - mean[channel]) / std[channel]
官方文档:torchvision.transforms.Normalize
CLASS torchvision.transforms.Normalize(mean, std, inplace=False)
主要参数:
- mean(sequence):每个通道的均值序列。
- std(sequence):每个通道的标准偏差序列。
- inplace(booloptional):使用Bool使此操作就地执行。
代码实现
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 1)writer.close()
5. torchvision.transforms.RandomCrop
在随机位置裁剪给定的图像。
如果图像是torch tensor,则预计具有[…,H,W]形状,其中…表示任意数量的前导维度,但如果使用非恒定填充,则预计输入最多具有2个前导维度。
官方文档:torchvision.transforms.RandomCrop
CLASS torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')
主要参数:
- size (sequence or int):裁剪的所需输出大小。
- 如果size是一个int而不是像(h,w)这样的序列,则会进行方形裁剪(size,size)
- 如果提供长度为1的序列,则将其解释为(size[0],size[0])
- padding(int or sequence, optional) :可选填充图像的每个边框。默认值为“无”。
- 如果只提供一个int,则用于填充所有边框。
- 如果提供长度为2的序列,则这分别是左/右和顶/底上的填充。
- 如果提供长度为4的序列,则这分别是用于左、上、右和下边界的填充。
- pad_if_needed (boolean) :如果图像小于所需的大小,它将填充图像,以避免引发异常。由于裁剪是在填充之后完成的,因此填充似乎是在随机偏移处完成的。
- fill (number or tuple):常量填充的像素填充值。默认值为0。
- 如果是长度为3的元组,则分别用于填充R、G、B通道。
- 此值仅在padding_mode为常量时使用。
- torch张量仅支持数字。PIL图像仅支持int或tuple值。
- padding_mode (str) :填充类型。应为:恒定、边缘、反射或对称。默认值为常量。
- constant:填充一个常量值,这个值是用fill指定的
- edge:填充图像边缘的最后一个值。如果输入一个5D火炬张量,最后3个维度将被填充,而不是最后2个维度
- reflect:填充图像的反射,而不重复边缘上的最后一个值。例如,在反射模式下,在两侧使用2个元素填充[1,2,3,4]将导致[3,2,1,2,3,4,3,2]
- 对称:图像反射的焊盘重复边缘上的最后一个值。例如,在对称模式下,在两侧用2个元素填充[1,2,3,4]将导致[2,1,1,2,3,4,4,3]
代码实现
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter = SummaryWriter("logs")
img = Image.open("image/刻晴.jpg")# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)# RandomCrop
trans_random = transforms.RandomCrop(512)
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):img_crop = trans_compose_2(img)writer.add_image("RandomCrop", img_crop, i)writer.close()
相关文章:
Pytorch学习:torchvison.transforms常用包(ToTensor、Resize、Compose和RandomCrop)
torchvision.transforms常用包 1. torchvision.transforms.ToTensor2. torchvision.transforms.Resize3. torchvision.transforms.Compose4. torchvision.transforms.Normalize5. torchvision.transforms.RandomCrop 1. torchvision.transforms.ToTensor 将PIL Image或ndarray…...
算法通关村十二关 | 字符串转换
1. 转换小写字母 LeetCode709:给你一个字符串s,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。 每个字母都是有确定的ASCII的,可以根据码表操作子字符串,常见的ASCII范围是: a-z: 97-122, …...
前端进阶Html+css09----BFC模型
1.什么是BFC模型 全称是:Block formatting context(块级格式化上下文),是一个独立的布局环境,不受外界的影响。 2.FC,BFC,IFC 元素在标准流里都属于一个FC(Formatting Context)。 块级元素的布…...
重排链表(C语言)
题目: 示例: 思路: 这题我们将使用栈解决这个问题,利用栈先进后出的特点,从链表的中间位置进行入栈,寻找链表的中间位置参考:删除链表的中间节点,之后从头开始进行连接。 本题使用…...
el-table动态合并单元格
el-table使用这个方法合并单元格,:span-method“hbcell” <el-table size"small" :data"table.data" border empty-text"暂无数据" :cell-style"cellStyle" :header-cell-style"tableHeaderColor":span-meth…...
html元素
文章目录 html基本结构属性语义化为什么要语义化 示例head中属性样式一些概念块级元素与行级元素空白折叠 html编程没有css的html显示逻辑 html基本结构 html基本单元就是元素,每个元素有标记和属性,如: <a href"...">www&…...
push github
一、生成密钥 打开git bash执行下面指令,Enter下一步Enter下一步..生成ssh key 密钥; ssh-keygen -t rsa 二、 复制公共密钥到git hub 登录github,在选项setting >> SSH and GPG key >> add new ssh添加刚才的公钥地址即可 验证…...
iFluor 594 Styramide是一种荧光染料,常用于生物分子标记和成像
试剂 | 基础知识概述(部分): 中文名称:Alexa Fluor 594酪Styramide 分子量:1341.71 胺的优异替代品 100 Slides 英文名称:iFluor 594 Ex (nm):588 Em (nm):604 规格标准:1g&am…...
动态规划入门之01背包变形嗑药
P1802 5 倍经验日 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 嗑药固然可耻,但是能让你快速变强 --鲁迅 手动滑稽,话归正题 动态规划之背包入门01背包模板_爱莉我老婆的博客-CSDN博客 这是01背包的模板,没看的可以去看看。 我们把…...
数据结构——栈和队列OJ题
栈和队列小提升! 前言一、用队列实现栈队列接口实现(1)栈的接口定义(2)栈的初始化(3)入栈函数的定义(4)出栈函数的定义(5)查找栈顶元素࿰…...
同态排序算法
参考文献: [Batcher68] Batcher K E. Sorting networks and their applications[C]//Proceedings of the April 30–May 2, 1968, spring joint computer conference. 1968: 307-314. [SV11] Smart, N.P., Vercauteren, F.: Fully homomorphic SIMD operations. IA…...
“深入探索JVM内部机制:解析Java虚拟机的工作原理“
标题:深入探索JVM内部机制:解析Java虚拟机的工作原理 摘要:本文将介绍Java虚拟机(JVM)的工作原理,包括类加载、内存管理、垃圾回收和字节码执行等方面。通过深入理解JVM的内部机制,开发人员可以…...
为应用程序接入阿里云CDN优化网站访问速度
文章目录 1.KodCloud云盘系统接入CDN之前的效果2.配置KodCloud云盘接入CDN加速器2.1.添加CDN域名2.2.配置域名信息2.3.CDN推荐配置设置2.4.CDN加速器配置完成 3.配置云解析DNS增加CDN域名的解析4.为CDN加速器配置HTTPS5.验证网站是否接入CDN6.访问应用程序观察请求速度7.观察CD…...
索引设计规范
索引是帮助数据库高效获取数据的数据结构。索引是加速查询的常用技术手段。在设计索引时,要遵循索引设计规范,避免不必要的踩坑。 【推荐】索引存储结构推荐BTREE InnoDB和MyISAM存储引擎表,索引类型必须为BTRER,MEMORY表可以根…...
Appium 2安装与使用java对Android进行自动化测试
文章目录 1、Appium 2.1安装1.1、系统要求1.2、安装Appium2.1服务1.3、安装UiAutomator2驱动1.4、安装Android SDK platform tools1.5、下载OpenJDK 2、Android自动代码例子2.1、安装Android自动化测试元素定位工具Appium Inspector2.2、编写android app自动化测试代码和使用ex…...
小程序运营方式有哪些?如何构建小程序运营框架?
如今,每个企业基本都做过至少一个小程序,但由于小程序本身不具备流量、也很少有自然流量,因此并不是每个企业都懂如何运营小程序。想了解小程序运营方式方法有哪些? 在正式运营小程序前,了解小程序的功能与企业实际经…...
【golang】for语句和switch语句
使用携带range子句的for语句时需要注意哪些细节? numbers1 : []int{1, 2, 3, 4, 5, 6} for i : range numbers1 {if i 3 {numbers1[i] | i} } fmt.Println(numbers1)这段代码执行后会打印出什么内容? 答案:[1 2 3 7 5 6] 当for语句被执行…...
三、数据库索引
1、索引介绍 索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。 常见的索引结构有:B数,B树,Hash和红黑树等。在MySQL中,无论是 InnoDB还是MyISAM,都使用了B树作为索引…...
长时间带什么耳机最舒服,分享长时间佩戴舒服的耳机推荐
时代在进步,科技在不断革新。近年来,一种崭新的耳机——骨传导耳机,如火如荼地进驻耳机市场,引起一阵热潮。不论是平日里的工作出勤还是运动时的挥洒汗水,相比传统耳机,骨传导耳机无疑更加贴合现代生活的需…...
Yolov8小目标检测(1)
💡💡💡本文目标:通过原始基于yolov8的红外弱小目标检测,训练得到初版模型,进行问题点分析; 💡💡💡Yolo小目标检测,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,带你轻松实现小目标检测涨点 💡💡…...
GPS定位漂移问题分析
有很多种因素会影响到GPS的准确率,以下是一个GPS误差引入简表: l 卫星时钟误差:0-1.5米 l 卫星轨道误差:1-5米 l 电离层引入的误差:0-30米 l 大气层引入的误差:0-30米 l 接收机…...
前端简介(HTML+CSS+JS)
学习Django过程中遇到一些前端相关的内容,于是整理了一下相关概念。 前端开发是创建WEB页面或APP等前端界面呈现给用户的过程。 如果只是想要入门前端,只要学习网页三剑客(HTML、CSS、JavaScript)即可。 如果把网页比喻成一个房子,HTML就是…...
List与String数组互转
一.List 转为 String 数组 1.使用toArray方法 public static void main(String[] args) {List<String> list Lists.newArrayList("1","2","3");// Java6以前版本String[] str1 list.toArray(new String[list.size()]);// Java6以后版本…...
MySQL中的数据类型
文章目录 1 常见的数据类型2 整数类型2.1 属性 M2.2 属性 UNSIGNED2.3 属性 ZEROFILL2.4 整数类型的适用场景 3 浮点类型4 定点类型5 位类型6 日期与时间类型6.1 YEAR 类型6.2 DATE 类型6.3 TIME 类型6.4 DATETIME 类型6.5 TIMESTAMP 类型 1 常见的数据类型 类型类型分类整数类…...
python多任务
一、多任务 1.1 概念 多任务就是指:同一时间能执行多个任务。比方我们的电脑能一边QQ聊天,一边写论文,还能听歌。 1.2 多任务的优势: 多任务的最大好处是 充分利用CPU资源,提高程序的执行效率。 1.3 多任务的两种表…...
c语言 - inline关键字(内联函数)
概念 在编程中,inline是一个关键字,用于修饰函数。inline函数是一种对编译器的提示,表示这个函数在编译时应该进行内联展开。 内联展开是指将函数的代码插入到调用该函数的地方,而不是通过函数调用的方式执行。这样可以减少函数调…...
如何在Ubuntu 18.04上安装PHP 7.4并搭建本地开发环境
引言 PHP是一种流行的服务器脚本语言,用于创建动态和交互式web页面。开始使用你选择的语言是学习编程的第一步。 本教程将指导您在Ubuntu上安装PHP 7.4,并通过命令行设置本地编程环境。您还将安装依赖管理器Composer,并通过运行脚本来测试您…...
狭义相对论
文章目录 一、为什么光速不变?二、为什么爱因斯坦坚信“相对性原理”三、逻辑和数学显威力,狭义相对论时空变换(洛伦兹变换)推导四、新时空变换带来的新时空观1、有关相对论时间的“傻问题”2、关于相对论的“怪问题”3、关于“双…...
仓库使用综合练习
目录 1、使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。 2、安装搭建私有仓库 Harbor 3、编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私有仓库。 4、Dockerfile快速搭建自己专属的LAMP环境,生…...
如何在前端实现WebSocket发送和接收TCP消息(多线程模式)
目录 第一步:创建WebSocket连接第二步:监听WebSocket事件第三步:发送消息第四步:后端处理函数说明 当在前端实现WebSocket发送和接收TCP消息时,可以使用以下步骤来实现多线程模式。本文将详细介绍如何在前端实现WebSoc…...
南昌网站怎么做seo/网站前期推广
No Session found for current thread 出现这个错误通常是因为没有添加事务管理 解决方式:检查你的Service方法,添加注解Transactional...
青海公司网站建设哪家快/智推教育seo课程
在Shell中使用“echo $LANG”查询服务器是否支持中文编码 [aaa]# echo $LANG zh_CN.GB18030 在XShell中 文件——属性——终端 设置相应的编码方式。...
ps做的网站怎样在dw里打开/百度优选官网
题目大意: 给定一个长度为\(n\)的序列 让你找一个\(x\),使得\(ans\)尽可能小 其中\[ans\sum_{i1}^{n}\lfloor\frac{a_i}{x}\rfloor \sum_{i1}^{n} a_i\mod x \] 我们看到这个式子,可以考虑化简一下\[ans\sum_{i1}^{n}\lfloor\frac{a_i}{x}\r…...
网站制作过程合理的步骤是/高端营销型网站
不要求完全能背,选项给你之后,能分辨出来就行。 4大价值观: 个体和互动 高于流程和工具 工作的软件 高于详尽的文档 客户合作 高于合同谈判 响应变化 高于遵循计划 12大原则: 我们的最高目标是,通过尽早持续交付有…...
.net 网站制作/网站信息查询
.NET Framework 3.0 中增加了不少新功能,例如 Windows Workflow Foundation (WF)、Windows Communication Foundation (WCF)、Windows Presentation Foundation (WPF) 和 Windows CardSpace,.NET Framework 3.5 在这些新增功能的基础上增量构建而成。此外…...
武汉开发网站建设/推广策略有哪些方法
2020款联想系推荐创作立场声明:文章为原创购买理由小新 Air14 2020锐龙版14.0英寸高性能轻薄笔记本如果你是普通学生或上班族,预算有限,又想电脑续航能力强,做PPT观感好,选它!配置CPU:第三代AMD…...