当前位置: 首页 > news >正文

Pytorch-03数据的Transform

Transforms

原始的数据形式可能并不符合模型算法所要求的输入形式。例如一个图片刚读入内存的时候可能还是numpy形式,而模型输入需要是tensor形式等等。亦或者模型要求的标签是one-hot,而现在的标签是整数等等的情况。

为了规范、统一的解决这个问题,pytorch定义了transform来在Dataset的__getitem__阶段,对数据进行处理,然后再交给Dataloader,再交给模型以供训练或推理。

在TorchVision中,所有的datasets都有两个可以指定的transform参数:

  • transform: 定义要怎么处理初始的features(数据样本)
  • target_transform:定义要怎么处理初始标签

torchvision.transforms模块提供了很多开箱即用的,常用的转换方法

对于FashionMNIST数据集,图片是PIL图片格式, 标签是整数形式,为了能进行分类训练,我们需要把图片转换成归一化之后的tensors,并且把整数标签转换为one-hot编码之后的tensor。

import torch
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambdads = datasets.FashionMNIST(root="data",train=True,download=True,transform=ToTensor(),target_transform=Lambda(lambda y; torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))

ToTensor()

这个方法会把一个PIL图片或者ndarray转换成FloatTensor, 并且把图片的像素值归一化到[0, 1]之间。

归一化对训练又很多好处,如加速训练,避免梯度爆炸或者梯度消失,让训练更加稳定。

Lambda Transforms

你可以用torchvision.transforms.Lambda将任何简单的函数或 lambda 表达式作为转换器来使用。这里是定义了一个标签转换为one-hot编码tensor的匿名函数。

target_transform = Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y), value=1)) 

lambda y 表明是一个匿名函数,接受一个参数y,也就是标签的整数值,然后利用torch.zeros(10, dtype=torch.float)创建一个全0的一维张量,最后使用scatter_(dim=0. index=torch.tensor(y), value=1)就地操作把自己index为y的元素赋值为1,这样就实现了one-hot编码。

http://www.dtcms.com/a/313233.html

相关文章:

  • 2106. 摘水果,梳理思路
  • 新手向:Python制作贪吃蛇游戏(Pygame)
  • Redis面试精讲 Day 9:Redis模块开发与扩展
  • 信创数据库-DM(达梦)数据库安装教程
  • Rust:如何访问 *.ini 配置文件?
  • 【项目日志|苍穹外卖】 Day1:项目环境搭建与架构设计
  • 反向代理+网关部署架构
  • Java学习第一百零二部分——API网关
  • Claude Code入门学习笔记(五)--Claude Code命令行输入
  • 大白话讲解MCP
  • 多种单文件版分析型数据库调用底层函数对比
  • [Oracle] TO_DATE()函数
  • cs285 lecture13
  • 手机端使用表格填写表单问题
  • 复现YOLOV5+训练指定数据集
  • STM32-ESP8266通过MQTT与阿里云通讯
  • MySQL连接算法和小表驱动大表的原理
  • 李宏毅深度学习教程 第8-9章 生成模型+扩散模型
  • 【Django】-7- 实现注册功能
  • 09.Redis 常用命令
  • Android 之 蓝牙通信(2.0 经典)
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-58,(知识点:硬件产品的功率优化)
  • C++中多线程和互斥锁的基本使用
  • 【RH124 问答题】第 8 章 监控和管理 Linux 进程
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现实时食物水果的检测识别(C#代码UI界面版)
  • 使用 Spring Initializr 生成项目结构:Java 开发效率提升指南
  • 【QT】常⽤控件详解(二)windowOpacitycursorfontsetToolTipfocusPolicystyleSheet
  • 大语言模型涉及的一些概念(持续更新)
  • VisualStudio的一些开发经验
  • 思二勋:数字资产化与资产数权化是RWA运作的核心逻辑