首页 > 其他分享 >Pytorch之transforms

Pytorch之transforms

时间:2024-03-25 20:31:57浏览次数:20  
标签:tensor img writer Pytorch transforms trans resize

文章目录


一、transforms是什么?

transforms 对应 transform.py 文件。可以理解成一个工具箱,里面定义的各种类和方法,可以处理图片,对图片进行加工,得到我们想要的结果。
在这里插入图片描述
常用的输入图片对象的数据类型

PIL : Image.open()
tensor : ToTensor()
ndarrays: cv.imread()
常用的Transform有:

1.ToTensor() :将图片对象类型转为 tensor
2.Normalize() :对图像像素进行归一化计算
3.Resize():重新设置 PIL Image的大小,返回也是PIL Image格式
4.Compose(): 输入为 transforms类型参数的列表,

关于transforms的导入如下

from torchvisoin import transforms

二、Tensor

1.为何引入tensor类型的变量呢

深度学习引入tensor类型的变量是因为深度学习模型中涉及大量的矩阵运算和张量运算。Tensor(张量)是多维数组的抽象表示,可以表示各种数据类型,如标量(0维张量)、向量(1维张量)、矩阵(2维张量)以及更高维度的数组。在深度学习中,神经网络的参数和输入数据都可以表示为张量,通过张量操作可以高效地进行大规模数据的运算和处理。
Tensor数据类型还包装了神经网络需要的一些参数,如下图。
在这里插入图片描述

Tensor类型的变量具有以下优点:

  1. 支持并行计算:张量运算可以在GPU等并行计算设备上高效执行,加速深度学习模型的训练和推理过程。
  2. 灵活性:张量可以表示不同维度的数据,适用于各种深度学习任务,如图像处理、自然语言处理等。
  3. 数学表达能力:张量操作支持各种数学运算,如矩阵乘法、逐元素操作等,方便构建复杂的神经网络模型。

因此,引入tensor类型的变量可以更好地满足深度学习模型对数据表示和运算的需求,提高模型的效率和灵活性。
在这里插入图片描述

2.代码示例

代码如下(示例):

from torchvision import transforms
from PIL import Image

img_path = "S:/pythonProject/1.png"
img = Image.open(img_path)

tensor_trans = transforms.ToTensor()    #创建工具
tensor_img = tensor_trans(img)      #实验工具转化成tensor
print(tensor_img)

在这里插入图片描述
tensor类数据也可以配合tensorboard输出图片。
writer.add_image(tensor)
在这里插入图片描述

二、Normalize类

normalize 可以直接理解成规范化,标准化亦或是归一化,这里的Normalize工具就是为了实现标准化的。
在这里插入图片描述
先看一下源码的注释:
该类实例化时需要两个参数,第一个参数mean 代表每个通道上所有数值的平均值,第二个参数std 代表每个通道上所有数值的标准差。而图片的channels查看,可以通过print(img)进行查看mode是几个通道。

在这里插from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
img_path = "S:/pythonProject/1.png"
img = Image.open(img_path)
print(img)
tensor_trans = transforms.ToTensor()    #创建工具
tensor_img = tensor_trans(img)      #实验工具转化成tensor
writer.add_image("ToTensor",tensor_img)
print(tensor_img[0][0][0])
#进行归一化Normalize
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])  #实例化normalize工具类
img_norm = trans_norm(tensor_img)   #归一化
writer.add_image("Normalize",img_norm)
writer.close()入代码片

归一化后的效果
在这里插入图片描述

三、Resize

改变图片的尺寸。

在这里插入图片描述
注意:
当如果输入的参数是一个序列,即长和宽两个整数(h,w),则图像会按该长和宽进行resize。
如果输入的参数是一个整数x,将图片短边缩放至x,长宽比保持不变。

这里无论是Image.open()读取的图像信息,亦或者tensor数据都是可以的。

print(img.size) #输出现在图像的尺寸规格
trans_resize = transforms.Resize((512,512))
img_resize = trans_resize(img)
img_resize = tensor_trans(img_resize)
writer.add_image("Resize",img_resize,0)
print(img_resize)
writer.close()

在这里插入图片描述
这里可以明显看出图片的大小已经改变了呢。

三、Compose

compose如单词的意思,组成,其功能就是将resize和tensor这种工具一块组成为一个结合体,实现多步变换。链式编程一步完成。
在这里插入图片描述
下面用代码举例说明

tensor_trans = transforms.ToTensor()    #创建工具
trans_resize = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize,tensor_trans])     #需要注意这里输入的是一个列表[]
res = trans_compose(img)
writer.add_image("resize",res,1) #输出图片
writer.close()

在这里插入图片描述
注意compose列表的顺序,前一个列表元素的输出,是下一个列表元素的输入。顺序的不同可能会导致不同的结果或者报错。但是这里并无这种情况,因为Resize可以处理PIL数据和tensor数据。

三、Random_Crop

随机裁剪:对图像进行随机大小裁剪,如果指定数字后就是按照数字大小进行裁剪。

tensor_trans = transforms.ToTensor()    #创建工具
trans_cup = transforms.RandomCrop(512)  #裁剪大小为512*512,也可直接给出h和w
trans_compose2 = transforms.Compose([trans_cup,tensor_trans])
for i in range(10):
    co2 = trans_compose2(img)
    writer.add_image("randomcup",co2,i)

效果如图所示。
在这里插入图片描述

标签:tensor,img,writer,Pytorch,transforms,trans,resize
From: https://blog.csdn.net/Dog_King_/article/details/137016592

相关文章

  • Pytorch学习笔记
    输出关于PyTorch、CUDA设备以及CUDA运行时的相关信息importtorchdefcheck_torch_and_cuda_details():#检查PyTorch版本print("PyTorchversion:",torch.__version__)#检查CUDA是否可用iftorch.cuda.is_available():device=torch.devi......
  • 深度学习 - PyTorch基本流程 (代码)
    直接上代码importtorchimportmatplotlib.pyplotaspltfromtorchimportnn#创建dataprint("****CreateData****")weight=0.3bias=0.9X=torch.arange(0,1,0.01).unsqueeze(dim=1)y=weight*X+biasprint(f"NumberofXsamples:{len......
  • 深度学习——PyTorch基础
    目录一、Tensor1、Tensor简介(1)张量(Tensor)的解析(2)张量(Tensor)的类型(3)张量(Tensor)的维度延伸(4)张量(Tensor)在深度学习中的应用(5)张量(Tensor)的数学解读(6)张量(Tensor)的综述2、Tensor对象及其运算(1)Tensor的基本属性:(2)Tensor的创建:(3)Tensor的运算:(4)自动求导与梯度......
  • 基于PyTorch深度学习实战入门系列-PyTorch基础全
    Torch的基本使用判断GPU是否可用torch.cuda.is_available()张量Torch定义了10种张量类型,包括CPU和GPU形式,如下表所示:数据类型dtypeCPU张量GPU张量32位浮点数torch.float32、torch.floattorch.FloatTensortorch.cuda.FloatTensor64位浮点数torch.float64、t......
  • pytorch学习
    x=torch.tensor([1,2])before=id(x)x=x-4before==id(x)返回值是False,说明x=x-4会构造一个新的tensor而若修改为x-=4,则返回值为True,说明会原地修改,更高效对于python的int类型来说:x=10before=id(x)x+=10before==id(x)由于int是一种不......
  • 【锂电池SOC估计】【PyTorch】基于Basisformer时间序列锂离子电池SOC预测研究(python代
     ......
  • pytorch 清除中间变量优化显存
    参考(这里面有各种方法):https://cloud.tencent.com/developer/article/2374407最近训一个程序,发现训了一半突然outofmemory了。正常来说,outofmemory第一个batch就应该出现了,而不是训练一半再报错,感觉有些中间变量没有回收的锅。通常情况下,数据先存在内存上,然后把每个......
  • 如何用pytorch调用预训练Swin Transformer中的一个Swin block模块
    1,首先,我们需要知道的是,想要调用预训练的SwinTransformer模型,必须要安装pytorch2,因为pytorch1对应的torchvision中不包含SwinTransformer。2,pytorch2调用预训练模型时,不建议使用pretrained=True,这个用法即将淘汰,会报警告。最好用如下方式:fromtorchvision.models.swin_trans......
  • 遥感影像问题深度学习:PyTorch在气候变化研究中的应用
    我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时代已然来临。随着小卫星星座的普及,......
  • ubuntu安装cuda和cudnn,并测试tensorflow和pytorch库的与cuda的兼容性(2023年版)
    lspci|grep-invidia查看nvidia设备,看到GPUgcc--version检查是否安装上gcc软件包根据官方文档指示,pipinstalltorch==1.13.1+cu117-fhttps://download.pytorch.org/whl/torch_stable.html,pipinstalltorchaudio==0.13.1+cu117-fhttps://download.pytorch.org/whl/torch......