掌握PyTorch数据预处理(一):让模型表现更上一层楼!!!

news2024/11/19 0:54:55

引言

在PyTorch中,数据预处理是模型训练过程中不可或缺的一环。通过精心优化数据,我们能够确保模型在训练时能够更高效地学习,从而在实际应用中达到更好的性能。今天,我们将深入探讨一些常用的PyTorch数据预处理技巧,帮助你充分发挥数据的潜力,为模型训练打下坚实的基础。

常用数据预处理方法

数据标准化

数据标准化的目的是将数据转换成均值为0,标准差为1的形式,这样可以使得数据分布更加均匀,减少数据的可变性。

在PyTorch中,可以使用torchvision.transforms.Normalize来进行数据标准化。Normalize函数需要传入两个参数,分别为mean和std。mean为数据集的均值,std为数据集的标准差。通过将数据减去mean,再除以std,就可以得到标准化的数据。

下面是一个使用torchvision.transforms.Normalize进行数据标准化的例子:

import torchvision.transforms as transforms  
from PIL import Image  
import numpy as np  
  
# 加载图像  
image = Image.open("lena.png")  
  
# 将图像转换为numpy数组  
image_array = np.array(image)  
  
# 定义预处理步骤  
preprocess = transforms.Compose([  
    transforms.ToTensor(),  
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  
])  
  
# 对图像进行预处理  
preprocessed_image = preprocess(image_array)

数据增强

数据增强是一种通过应用各种随机变换来生成新数据的技术,可以增加模型的泛化能力。对于图像数据,可以使用torchvision.transforms模块中的函数来随机旋转、裁剪、翻转图像等,从而增加模型的泛化能力。

下面是一个示例代码,用于对同目录下的lena.png图片进行数据增强:

import torchvision.transforms as transforms
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

# 加载图像
image = Image.open("lena.png")

# 定义数据增强变换
transform = transforms.Compose([
    transforms.RandomRotation(20),  # 随机旋转20度
    # transforms.RandomCrop(32),  # 随机裁剪出32x32的区域
    transforms.RandomHorizontalFlip(),  # 随机水平翻转
])

# 对图像进行数据增强
enhanced_image = transform(image)

# 将PIL.Image对象转换为numpy数组
numpy_image = np.array(enhanced_image)

# 显示图像
plt.imshow(numpy_image)
plt.axis("off")
plt.show()

运行结果:
在这里插入图片描述

To Tensor

transforms.ToTensor()可以将PIL Image或者ndarray转化为tensor,并且将Intensity的取值范围转化为[0.0, 1.0]之间 。

示例代码如下:

import torchvision.transforms as transforms  
from PIL import Image  
import numpy as np  
  
# 加载图像  
image = Image.open("lena.png")  
  
# 将图像转换为numpy数组  
image_array = np.array(image)  # 这步没有也没问题
  
# 定义预处理步骤  
preprocess = transforms.Compose([  
    transforms.ToTensor()
])  
  
# 对图像进行预处理  
preprocessed_image = preprocess(image_array)

one-hot编码

在机器学习中,分类问题的标签通常是以整数的形式表示的。然而,为了使模型能够更好地处理这些标签,我们可以使用一种称为"one-hot编码"的技术将它们转换为二进制向量。在PyTorch中,可以使用torch.nn.functional.one_hot来实现这一操作。

在one-hot编码中,每个标签都被表示为一个唯一的二进制向量。假设我们有N个类别的标签,那么每个标签都会被转换为长度为N的二进制向量,其中只有该标签对应的索引位置上的值为1,其余位置上的值为0。

下面是一个示例代码,展示了如何在PyTorch中使用torch.nn.functional.one_hot来实现标签的one-hot编码:

import torch  
import torch.nn.functional as F  
  
# 假设我们有5个类别的标签  
num_classes = 5  
  
# 创建一个标签的张量,其中包含了3个样本的标签  
# 每个标签都是一个整数,取值范围从0到num_classes-1  
labels = torch.tensor([1, 3, 2])  
  
# 使用torch.nn.functional.one_hot将标签转换为one-hot编码的二进制向量  
one_hot_labels = F.one_hot(labels, num_classes)  
  
# 输出one-hot编码的标签张量  
print(one_hot_labels)

运行结果:
在这里插入图片描述

调整图像大小

在处理图像数据时,一个常见的需求是将所有图像调整为相同的大小,以便输入到神经网络中。这样做可以避免因为输入图像尺寸不同而带来的麻烦,同时提高神经网络的训练效率。在PyTorch中,可以使用torchvision.transforms.Resize轻松实现这一需求。

下面是一个示例代码,展示了如何使用torchvision.transforms.Resize将图像调整为相同的大小:

from torchvision import transforms
from PIL import Image

# 加载图像
image1 = Image.open("lena.png")
print(image1.size)

# 创建转换操作
transform = transforms.Resize((224, 224)) # 将所有图像调整为224x224的大小

# 对图像进行转换
resized_image1 = transform(image1)
print(resized_image1.size)

运行结果
在这里插入图片描述

结束语

如果本博文对你有所帮助/启发,可以点个赞/收藏支持一下,如果能够持续关注,小编感激不尽~
如果有相关需求/问题需要小编帮助,欢迎私信~
小编会坚持创作,持续优化博文质量,给读者带来更好de阅读体验~

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

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

相关文章

【交换排序 简单选择排序 堆排序 归并排序】

文章目录 交换排序简单选择排序堆排序归并排序 交换排序 冒泡排序的算法分析: 冒泡排序最好的时间复杂度是O(n)冒泡排序最好的时间复杂度是O(n平方)冒泡排序平均时间复杂度为O(n的平方)冒泡排…

1-6、编程语言排行榜

语雀原文链接 https://www.tiobe.com/tiobe-index/

基于Vue框架的电子商城购物平台小程序的设计与开发

基于JavaWebSSMVue电子商城购物平台小程序系统的设计和实现 源码获取入口KaiTi 报告/Ren务书Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 KaiTi 报告/Ren务书 一、选题的目的和意义 自从微信推出了微信小程序…

如何自动筛选高质量的指令微调数据喂给大模型?

前言 大家都知道在大模型时代,数据有多么重要,质量多高都不过分!甚至直接决定着最终的效果。 尤其做SFT,模型框架基本不用改(事实上也改不动),如何做一份符合自己场景高质量的SFT数据成了唯一…

C++中STL的容器vector

文章目录 什么是vectorvector与普通顺序表不同的点 vector的成员函数operatoroperator[]begin与end与iteratorsize()capacityresizeemptyreservepush_backpop_backinserteraseswapclear成员变量 总结 什么是vector vector:是数据结构里面的顺序表,开辟一…

【MATLAB】基于EMD分解的信号去噪算法(基础版)

代码操作 【MATLAB】基于EMD分解的信号去噪算法(基础版) 代码的主要内容 基于EMD(经验模态分解)的信号去噪算法通常可以结合相关系数、信号的熵值或者方差贡献率来完成去噪处理。这些指标可以用于确定阈值,从而对信号…

WPF仿网易云搭建笔记(2):组件化开发

文章目录 前言专栏和Gitee仓库依赖属性实战:缩小,全屏,关闭按钮依赖属性操作封装主窗口传递this本身给TitleView标题控件主要代码MainWindow.xmalMainWindow.cs依赖属性方法封装TitleView.csTitleViewModelTitleViewModel实现效果 前言 这次…

FreeRTOS的内存管理方法(超详细)

内存管理 我们知道每次创建任务、队列、互斥锁、软件定时器、信号量或事件组时,RTOS 内核都需要 RAM , RAM 可以从 RTOS API 对象创建函数内的 RTOS 堆自动动态分配, 或者由应用程序编写者提供。 如果 RTOS 对象是动态创建的,那么…

Mac虚拟机CrossOver23破解版下载和许可证下载

CrossOver Mac Mac 和 Windows 系统之间的兼容工具。使 Mac 操作系统的用户可以运行 Windows 系统的应用,从办公软件、实用工具、游戏到设计软件, 您都可以在 Mac 程序和 Windows 程序之间随意切换。 系统要求 运行macOS的基于Intel或Apple Silicon 的…

99、NeRF ray space

CG相机模型 在图形学中最常用的相机模型的原理和小孔成像是类似的。 不同之处在于,如上图,小孔成像得到的图像是倒立的,但是我们希望得到的图像是正向的,因此,我们选择小孔前成像。 从 3D 到 2D 的投影,…

笔迹鉴定系统

用于笔迹鉴定书的生成。对于检材进行的特征采集,将采集到的特征自动排版,生成比对表,然后在比对表上进行标注。主要标注有:写法、笔顺、箭头、实线、虚线、左括号、右括号、上括号、下括号、运笔、注释、来源、折线、测量、矩形、…

iptables——建立linux安全体系

目录 一. 安全技术类型 二. linux防火墙 1. 按保护范围划分: 2. 按实现方式划分: 3. 按网络协议划分: 4. 防火墙原理 三. 防火墙工具——iptables 1. netfilter 中五个勾子函数和报文流向 数据包传输过程: ① .五表四链…

【2023传智杯-新增场次】第六届传智杯程序设计挑战赛AB组-DEF题复盘解题分析详解【JavaPythonC++解题笔记】

本文仅为【2023传智杯-第二场】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言二.赛题题目D题题目-E题题目-F题题目-二.赛题题解D题题解-…

个人博客网站如何实现https重定向(301)到http

对于个人网站站注册比较少的,服务器配置不是很好的,没必要https,https跳转到http是要时间的,会影响网站打开的速度。免费的https每年都要更换。个人博客网站https有一段时间了,而且很多页面都有收录排名,现在已去掉htt…

redis中使用事务保护数据完整性

事务是指一个执行过程,要么全部执行成功,要么失败什么都不改变。不会存在一部分成功一部分失败的情况,也就是事务的ACID四大特性(原子性、一致性、隔离性、持久性)。但是redis中的事务并不是严格意义上的事务&#xff…

Eclipse 4.30 正式发布 来看看有哪些值得期待的新特性

Eclipse 4.30 已正式发布,主要特性如下: 1、支持新的 Java 语言特性:包括 JEP 440: Record Patterns 和 JEP 441: Pattern Matching for Switch 2、针对 Java 编辑器的快速修复功能:包括添加默认 case、移除默认 case 和插入 br…

VGG模型

概念: CNN感受野 在卷积神经网络中,决定某一层输出结果中的一个元素所对应的输入层的区域大小,被称作感受野(receptive field)。通俗的解释是,输出feature map上的一个单元对应输入层上的区域大小。 VGG…

IntelliJ IDEA创建一个Maven项目

在IDEA中创建Maven项目,前提是已经安装配置好Maven环境 。 本文主要使用的是IntelliJ IDEA 2022.2.1 (Community Edition) 1.创建一个新project:File>Project 2.修改Maven配置:File>Settings>搜索maven 创建好的工程如下: src/main…

[ 蓝桥杯Web真题 ]-组课神器

目录 介绍 准备 目标 规定 思路 参考解法 介绍 在很多教育网站的平台上,课程的章节目录会使用树型组件呈现,为了方便调整菜单,前端工程师会为其赋予拖拽功能。本题需要在已提供的基础项目中,完成可拖拽树型组件的功能。 准…

【数据结构】——排序篇(上)

前言:前面我们已经学过了许许多多的排序方法,如冒泡排序,选择排序,堆排序等等,那么我们就来将排序的方法总结一下。 我们的排序方法包括以下几种,而快速排序和归并排序我们后面进行详细的讲解。 直接插入…