返回顶部
首页 > 资讯 > 精选 >pytorch中的transforms.ToTensor和transforms.Normalize怎么实现
  • 360
分享到

pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

2023-06-30 04:06:13 360人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“PyTorch中的transfORMs.ToTensor和transforms.Normalize怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytorch中的transforms.ToTensor和tr

本文小编为大家详细介绍“PyTorch中的transfORMs.ToTensor和transforms.Normalize怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytorch中的transforms.ToTensor和transforms.Normalize怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

transforms.ToTensor

最近看pytorch时,遇到了对图像数据的归一化,如下图所示:

pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

该怎么理解这串代码呢?我们一句一句的来看,先看transforms.ToTensor(),我们可以先转到官方给的定义,如下图所示:

pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

大概的意思就是说,transforms.ToTensor()可以将PIL和numpy格式的数据从[0,255]范围转换到[0,1] ,具体做法其实就是将原始数据除以255。另外原始数据的shape是(H x W x C),通过transforms.ToTensor()后shape会变为(C x H x W)。这样说我觉得大家应该也是能理解的,这部分并不难,但想着还是用一些例子来加深大家的映像

先导入一些包

import cv2import numpy as npimport torchfrom torchvision import transforms

定义一个数组模型图片,注意数组数据类型需要时np.uint8【官方图示中给出】

data = np.array([                [[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],                [[2,2,2],[2,2,2],[2,2,2],[2,2,2],[2,2,2]],                [[3,3,3],[3,3,3],[3,3,3],[3,3,3],[3,3,3]],                [[4,4,4],[4,4,4],[4,4,4],[4,4,4],[4,4,4]],                [[5,5,5],[5,5,5],[5,5,5],[5,5,5],[5,5,5]]        ],dtype='uint8')

这是可以看看data的shape,注意现在为(W H C)。

pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

使用transforms.ToTensor()将data进行转换

data = transforms.ToTensor()(data)

这时候我们来看看data中的数据及shape。

pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

很明显,数据现在都映射到了[0, 1]之间,并且data的shape发生了变换。

**注意:不知道大家是如何理解三维数组的,这里提供我的一个方法。

原始的data的shape为(5,5,3),则其表示有5个(5 , 3)的二维数组,即我们把最外层的[]去掉就得到了5个五行三列的数据。同样的,变换后data的shape为(3,5,5),则其表示有3个(5 , 5)的二维数组,即我们把最外层的[]去掉就得到了3个五行五列的数据。

transforms.Normalize????

相信通过前面的叙述大家应该对transforms.ToTensor有了一定的了解,下面将来说说这个transforms.Normalize????????????同样的,我们先给出官方的定义,如下图所示:

pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

可以看到这个函数的输出output[channel] = (input[channel] - mean[channel]) / std[channel]。这里[channel]的意思是指对特征图的每个通道都进行这样的操作。【mean为均值,std为标准差】接下来我们看第一张图片中的代码,即

pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

这里的第一个参数(0.5,0.5,0.5)表示每个通道的均值都是0.5,第二个参数(0.5,0.5,0.5)表示每个通道的方差都为0.5。【因为图像一般是三个通道,所以这里的向量都是1x3的】有了这两个参数后,当我们传入一个图像时,就会按照上面的公式对图像进行变换。【注意:这里说图像其实也不够准确,因为这个函数传入的格式不能为PIL Image,我们应该先将其转换为Tensor格式

说了这么多,那么这个函数到底有什么用呢?我们通过前面的ToTensor已经将数据归一化到了0-1之间,现在又接上了一个Normalize函数有什么用呢?其实Normalize函数做的是将数据变换到了[-1,1]之间。之前的数据为0-1,当取0时,output =(0 - 0.5)/ 0.5 = -1;当取1时,output =(1 - 0.5)/ 0.5 = 1。这样就把数据统一到了[-1,1]之间了那么问题又来了,数据统一到[-1,1]有什么好处呢?数据如果分布在(0,1)之间,可能实际的bias,就是神经网络的输入b会比较大,而模型初始化时b=0的,这样会导致神经网络收敛比较慢,经过Normalize后,可以加快模型的收敛速度。【这句话是再网络上找到最多的解释,自己也不确定其正确性】

读到这里大家是不是以为就完了呢?这里还想和大家唠上一唠上面的两个参数(0.5,0.5,0.5)是怎么得来的呢?这是根据数据集中的数据计算出的均值和标准差,所以往往不同的数据集这两个值是不同的?这里再举一个例子帮助大家理解其计算过程。同样采用上文例子中提到的数据。

上文已经得到了经ToTensor转换后的数据,现需要求出该数据每个通道的mean和std。

# 需要对数据进行扩维,增加batch维度data = torch.unsqueeze(data,0)    #在pytorch中一般都是(batch,C,H,W)nb_samples = 0.#创建3维的空列表channel_mean = torch.zeros(3)channel_std = torch.zeros(3)N, C, H, W = data.shape[:4]data = data.view(N, C, -1)  #将数据的H,W合并#展平后,w,h属于第2维度,对他们求平均,sum(0)为将同一纬度的数据累加channel_mean += data.mean(2).sum(0)  #展平后,w,h属于第2维度,对他们求标准差,sum(0)为将同一纬度的数据累加channel_std += data.std(2).sum(0)#获取所有batch的数据,这里为1nb_samples += N#获取同一batch的均值和标准差channel_mean /= nb_sampleschannel_std /= nb_samplesprint(channel_mean, channel_std)   #结果为tensor([0.0118, 0.0118, 0.0118]) tensor([0.0057, 0.0057, 0.0057])

将上述得到的mean和std带入公式,计算输出。

for i in range(3):    data[i] = (data[i] - channel_mean[i]) / channel_std[i]print(data)

输出结果:

pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

从结果可以看出,我们计算的mean和std并不是0.5,且最后的结果也没有在[-1,1]之间。

读到这里,这篇“pytorch中的transforms.ToTensor和transforms.Normalize怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: pytorch中的transforms.ToTensor和transforms.Normalize怎么实现

本文链接: https://lsjlt.com/news/327384.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • pytorch中的transforms.ToTensor和transforms.Normalize怎么实现
    本文小编为大家详细介绍“pytorch中的transforms.ToTensor和transforms.Normalize怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytorch中的transforms.ToTensor和tr...
    99+
    2023-06-30
  • pytorch中的transforms.ToTensor和transforms.Normalize的实现
    目录transforms.ToTensortransforms.Normalizetransforms.ToTensor 最近看pytorch时,遇到了对图像数据的归一化,如下图所示...
    99+
    2024-04-02
  • Pytorch怎么实现Transformer
    本篇内容主要讲解“Pytorch怎么实现Transformer”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Pytorch怎么实现Transformer”吧!一、构造数据1.1 句子长度#&nb...
    99+
    2023-06-30
  • pytorch中矩阵乘法和数组乘法怎么实现
    本篇内容介绍了“pytorch中矩阵乘法和数组乘法怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、torch.mul该乘法可简单理...
    99+
    2023-07-05
  • PyTorch中DataLoader怎么实现数据加载和批处理
    在PyTorch中,DataLoader是一个用于批处理数据的工具,可以实现数据加载和批处理。要使用DataLoader,首先需要定...
    99+
    2024-04-02
  • PyTorch中的卷积神经网络怎么实现
    在PyTorch中,可以使用torch.nn模块中的Conv2d类来实现卷积神经网络。以下是一个简单的示例,展示如何在PyTorch...
    99+
    2024-03-05
    PyTorch
  • Pytorch中的model.train()和model.eval()怎么使用
    本文小编为大家详细介绍“Pytorch中的model.train()和model.eval()怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pytorch中的model.train()和model.eval()怎么使用”文章能帮助...
    99+
    2023-07-06
  • Pytorch中net.train 和 net.eval怎么用
    这篇文章主要介绍Pytorch中net.train 和 net.eval怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在训练模型时会在前面加上:model.train()在测试模型时在前面使用:model.ev...
    99+
    2023-06-15
  • Pytorch中torch.flatten()和torch.nn.Flatten()怎么用
    本文小编为大家详细介绍“Pytorch中torch.flatten()和torch.nn.Flatten()怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Pytorch中torch.flatten()和torch.nn.Flatte...
    99+
    2023-06-29
  • PyTorch模型转TensorRT是怎么实现的?
    转换步骤概览 准备好模型定义文件(.py文件) 准备好训练完成的权重文件(.pth或.pth.tar) 安装onnx和onnxruntime 将训练好的模型转换为.onnx格式 ...
    99+
    2022-06-02
    PyTorch模型转TensorRT Python PyTorch
  • PyTorch中的train()、eval()和no_grad()怎么使用
    本篇内容介绍了“PyTorch中的train()、eval()和no_grad()怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么...
    99+
    2023-07-05
  • PyTorch怎么实现图像识别
    这篇文章主要介绍“PyTorch怎么实现图像识别”,在日常操作中,相信很多人在PyTorch怎么实现图像识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PyTorch怎么实现图像识别”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • 怎么使用Pytorch+PyG实现MLP
    这篇文章主要讲解了“怎么使用Pytorch+PyG实现MLP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Pytorch+PyG实现MLP”吧!项目环境:平台:Windows10语言...
    99+
    2023-07-05
  • PyTorch中怎么实现自定义损失函数
    要实现自定义损失函数,可以按照以下步骤在PyTorch中实现: 创建一个继承自torch.nn.Module的类,该类用于定义自定...
    99+
    2024-03-05
    PyTorch
  • 在 pytorch 中实现计算图和自动求导
    前言: 今天聊一聊 pytorch 的计算图和自动求导,我们先从一个简单例子来看,下面是一个简单函数建立了 yy 和 xx 之间的关系 然后...
    99+
    2024-04-02
  • PyTorch中的神经网络Mnist分类任务怎么实现
    这篇“PyTorch中的神经网络Mnist分类任务怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PyTorch中的神...
    99+
    2023-07-05
  • PyTorch怎么实现基本算法FedAvg
    本文小编为大家详细介绍“PyTorch怎么实现基本算法FedAvg”,内容详细,步骤清晰,细节处理妥当,希望这篇“PyTorch怎么实现基本算法FedAvg”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。数据介绍联...
    99+
    2023-06-30
  • pytorch transforms图像增强怎么实现
    这篇文章主要介绍“pytorch transforms图像增强怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytorch transforms图像增强怎么实现”文章能帮...
    99+
    2023-07-05
  • pytorch怎么实现bp神经网络
    要在PyTorch中实现一个BP神经网络,需要遵循以下步骤: 定义神经网络结构:首先,需要定义神经网络的结构,包括输入层、隐藏层和...
    99+
    2024-04-08
    pytorch
  • 怎么在Pytorch中切换 cpu和gpu
    本篇文章给大家分享的是有关怎么在Pytorch中切换 cpu和gpu,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方法1:x.to(device)把 device 作为一个可变...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作