iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >torchvision.transforms 数据预处理:ToTensor()
  • 470
分享到

torchvision.transforms 数据预处理:ToTensor()

pythonnumpypytorch 2023-10-08 06:10:46 470人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 1、ToTensor() 函数的作用2、读取图像时 PIL 和 opencv 的选择2.1 使用 PIL2.2 使用 opencv 3、ToTensor() 的使用3.1 关键

文章目录

ToTensor() 是PyTorch中的数据预处理函数,包含在 torchvision.transfORMs 模块下。一般用于处理图像数据,所以其处理对象是 PIL Image 和 numpy.ndarray 。

1、ToTensor() 函数的作用

必须要声明不能只看函数名,就以为 ToTensor() 只是将图像转为 tensor,其实它的功能不止于此

看一下 ToTensor() 函数的源码

class ToTensor:    """Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor. This transform does not support torchscript.    Converts a PIL Image or numpy.ndarray (H x W x C) in the range    [0, 255] to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0]    if the PIL Image belongs to one of the modes (L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1)    or if the numpy.ndarray has dtype = np.uint8    In the other cases, tensors are returned without scaling.    .. note::        Because the input image is scaled to [0.0, 1.0], this transformation should not be used when        transforming target image masks. See the `references`_ for implementing the transforms for image masks.    .. _references: https://GitHub.com/pytorch/vision/tree/main/references/segmentation    """

大意是:

(1)将 PIL Image 或 numpy.ndarray 转为 tensor

(2)如果 PIL Image 属于 (L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1) 中的一种图像类型,或者 numpy.ndarray 格式数据类型是 np.uint8 ,则将 [0, 255] 的数据转为 [0.0, 1.0] ,也就是说将所有数据除以 255 进行归一化。

(3)将 HWC 的图像格式转为 CHW 的 tensor 格式。CNN训练时需要的数据格式是[N,C,N,W],也就是说经过 ToTensor() 处理的图像可以直接输入到CNN网络中,不需要再进行reshape。

2、读取图像时 PIL 和 OpenCV 的选择

在自己建立 dataset 迭代器时,一般操作是检索数据集图像的路径,然后使用 PIL 库或 opencv库读取图片路径。

2.1 使用 PIL

import numpy as npfrom PIL import ImagefilePath="Dataset/FFHQ/00000.png"img1=Image.open(filePath)print(f"img1 = {img1}")    # img1 = img2 = np.array(img1)print(f"img2 = {img2}")"""img2 = [[[  0 130 146]  [  0 128 144]  [  0 125 141]  ...  [133 162 164]  [133 157 159]  [134 157 163]]]"""

可以看到,使用 PIL.Image 读取的图像是一种 PIL 类,mode=RGB,要想获得图像的像素值还需要将其转为 np.array 格式。

而 opencv 可以直接将图像读取为 np.array 格式,因此首选 opencv 。

2.2 使用 opencv

import cv2filePath="Dataset/FFHQ/00000.png"img=cv2.imread(filePath)print(f"img.shape = {img.shape}")     # img.shape = (128, 128, 3)print(f"img = {img}")     # img.dtype = uint8"""img = [[[146 130   0]  [144 128   0]  [141 125   0]  ...  [164 162 133]  [159 157 133]  [163 157 134]]]"""

仔细对比PIL 和 opencv 的输出结果可以发现,PIL默认输出的图片格式为 RGB,而opencv输出的是BGR格式。

使用opencv读取的图像是[H,W,C]大小的,数据格式是 np.uint8 ,经过 ToTensor() 会进行归一化。而其他的数据类型(如 np.int8)经过 ToTensor() 数值不变,不进行归一化,后面会详细讲述。并且经过ToTensor()后图像格式变为 [C,H,W]。

3、ToTensor() 的使用

3.1 关键知识点

不管是使用 PLT还是opencv,最终得到都是 np.array类型。因此:

ToTensor() 是将 np.array 的数据 转为 tensor 格式

这里一定要明确几个点:

(1)np.array 整型的默认数据类型为 np.int32,经过 ToTensor() 后数值不变,不进行归一化。(2)np.array 浮点型的默认数据类型为 np.float64,经过 ToTensor() 后数值不变,不进行归一化。(3)opencv 读取的图像格式为 np.array,其数据类型为 np.uint8    经过 ToTensor() 后数值由 [0,255] 变为 [0,1],通过将每个数据除以255进行归一化。(4)经过 ToTensor() 后,HWC 的图像格式变为 CHW 的 tensor 格式。(5)np.uint8 和 np.int8 不一样,uint8是无符号整型,数值都是正数。(6)ToTensor() 可以处理任意 shape 的 np.array,并不只是三通道的图像数据。

3.2 代码示例

下面通过代码熟悉 ToTensor() 的使用,分别看一下 np.uint8 和 非 np.uint8 类型的 np.array 经过 ToTensor() 之后的输出。

(1) np.uint8 类型

import numpy as npfrom torchvision import transformsdata = np.array([    [0, 5, 10, 20, 0],    [255, 125, 180, 255, 196]], dtype=np.uint8)tensor = transforms.ToTensor()(data)print(tensor)"""tensor([[[0.0000, 0.0196, 0.0392, 0.0784, 0.0000],         [1.0000, 0.4902, 0.7059, 1.0000, 0.7686]]])"""

(2)非 np.uint8 类型

import numpy as npfrom torchvision import transformsdata = np.array([    [0, 5, 10, 20, 0],    [255, 125, 180, 255, 196]])      # data.dtype = int32tensor = transforms.ToTensor()(data)print(tensor)"""tensor([[[  0,   5,  10,  20,   0],         [255, 125, 180, 255, 196]]], dtype=torch.int32)"""

来源地址:https://blog.csdn.net/qq_43799400/article/details/127785104

--结束END--

本文标题: torchvision.transforms 数据预处理:ToTensor()

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • torchvision.transforms 数据预处理:ToTensor()
    文章目录 1、ToTensor() 函数的作用2、读取图像时 PIL 和 opencv 的选择2.1 使用 PIL2.2 使用 opencv 3、ToTensor() 的使用3.1 关键...
    99+
    2023-10-08
    python numpy pytorch
  • python数据预处理
    Ⅰ.数据源 Ⅱ.导入库 import pandas as pdimport numpy as npfrom scipy import statsimport matplotlib.pyplot a...
    99+
    2023-09-21
    python 数据分析
  • 数据挖掘(2.3)--数据预处理
    目录 三、数据集成和转换 1.数据集成  2.数据冗余性  2.1 皮尔森相关系数 2.2卡方检验  3.数据转换 四、数据的规约和变换 1.数据归约 2数据离散化 三、数据集成和转换 1.数据集成  数据集成是将不同来源的数据整合...
    99+
    2023-09-10
    人工智能 python 数据挖掘 数据分析
  • 数学建模--数据预处理
    目录 一、数据统计 1、行列式的最大元素和最小元素 2、求向量的平均值和中值  3、对矩阵做排序  二、数据优化(数据残缺值和异常值的处理) 1、数据残缺 ①插值 ②拟合  ③邻近替换 ④KNN算法填充 2、数据异常 ①拉依达准则 ②替换异...
    99+
    2023-09-04
    python 算法 numpy
  • 头歌:数据预处理之数据清洗
    本关任务:完成泰坦尼克号遇难数据的清洗。   案例背景 泰坦尼克号遭遇的灾难震惊世界,如何避免灾难甚至预测灾难呢? 要实现首先要做好泰坦尼克号的损失数据统计,才能为数据分析打下基础。 编程要求 根据提示,你需要完成: 缺失值填充离群点检测 ...
    99+
    2023-10-07
    python 开发语言
  • 数据预处理方法整理(数学建模)
    这篇文章主要是整理了一些作者在各种建模比赛中遇到的数据预处理问题以及方法,主要针对excel或csv格式的数据,为后续进行机器学习或深度学习做前期准备 数据清洗 导入库和文件,这里使用的是绝对路径,可改为相对路径 import pandas...
    99+
    2023-09-10
    python 数据分析 机器学习 深度学习 cnn
  • 怎么用Python做数据预处理
    这篇文章给大家介绍怎么用Python做数据预处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前戏在拿到一份数据准备做挖掘建模之前,首先需要进行初步的数据探索性分析(你愿意花十分钟系统了解数据分析方法吗?),对数据探索...
    99+
    2023-06-02
  • 有哪些数据预处理的方法
    今天就跟大家聊聊有关有哪些数据预处理的方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。数据预处理的方法有:1、数据清理,通过填写缺失的值、光滑噪声数据、识别或删除离群点并解决不一致...
    99+
    2023-06-14
  • GO web 数据库预处理的实现
    目录什么是预处理? 那么预处理有啥好处? Go实现 MySQL 的事务 sqlx使用 gin + mysql + rest full api  上一篇文章我们进行了数据操作...
    99+
    2024-04-02
  • Python中如何进行数据预处理?
    Python是一种广泛使用的编程语言,它在数据科学和机器学习领域中也非常受欢迎。在这些领域中,数据预处理是一个至关重要的步骤,因为原始数据通常是不完整、不一致和不可靠的。在本文中,我们将讨论Python中如何进行数据预处理。 1.导入数据 ...
    99+
    2023-08-11
    日志 numy load
  • 使用Python对EXCEL数据的预处理
    一、熟悉数据 我们将EXCEL中的数据导入之后,需要对数据进行大致性的了解,当对数据充分地了解之后,才便于后期的分析工作。 该部分涉及到四个基本方法,分别为“shape&...
    99+
    2023-03-22
    Python EXCEL数据预处理 Python 数据预处理
  • Chainer怎么实现数据增强和数据预处理
    Chainer提供了一系列内置的数据增强和数据预处理函数来帮助用户实现数据增强和数据预处理。以下是一些常用的方法: 数据增强: ...
    99+
    2024-04-02
  • CNTK怎么实现数据增强和数据预处理
    CNTK(Microsoft Cognitive Toolkit)是一个深度学习框架,可以使用一些技术来实现数据增强和数据预处理。以...
    99+
    2024-04-02
  • Kylin如何进行数据建模和数据预处理
    Kylin 是一个开源的分布式分析引擎,专为交互式OLAP(联机分析处理)而设计。Kylin主要用于处理海量数据,并提供高效的多维分...
    99+
    2024-04-02
  • 如何在Neuroph中处理数据预处理和归一化
    在Neuroph中处理数据预处理和归一化可以通过以下步骤实现: 数据预处理: 首先,加载数据集并确保数据的完整性和准确性。 然...
    99+
    2024-04-02
  • 自然语言处理(二)——PTB数据集的预处
    参考书 《TensorFlow:实战Google深度学习框架》(第2版) 首先按照词频顺序为每个词汇分配一个编号,然后将词汇表保存到一个独立的vocab文件中。 #!/usr/bin/env python # -*- coding...
    99+
    2023-01-30
    自然语言 数据 PTB
  • pandas预处理部分地区数据案例
    数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三...
    99+
    2023-01-28
    pandas预处理数据 pandas预处理
  • 怎么在python中实现数据预处理
    这篇文章将为大家详细讲解有关怎么在python中实现数据预处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注...
    99+
    2023-06-14
  • python数据预处理的方法有哪些
    Python数据预处理的方法有:1. 数据清洗:处理缺失值、异常值、重复值等问题。2. 数据整合:将不同来源的数据整合到一起,如合并...
    99+
    2023-08-09
    python
  • Python数据清洗&预处理入门教程
    目录导入如果有缺失数据会怎么样如果包含属性数据,会怎么样呢你发现什么潜在问题了吗训练集与测试集的划分特征缩放对于哑变量而言是否需要进行缩放凡事预则立,不预则废,训练机器学习模型也是如...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作