Pytorch数据集读出到transform全过程

最近写代码又遇见了这个问题,又忘记了,于是写一篇博客记录一下。

一般我们使用pytorch获取CIFAR10数据集,一般这样写:

python 复制代码
mean = [0.4914, 0.4822, 0.4465]
std = [0.2023, 0.1994, 0.2010]
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize(mean=mean, std=std)])
dst_train = datasets.CIFAR10(data_path, train=True, download=True, transform=transform)  
dst_test = datasets.CIFAR10(data_path, train=False, download=True, transform=transform)

最后出来的结果都是小数和xxx数。

Q1. 数据从读入到处理结束

如果使用了ToTensoer,那么会将原始数据都归一化到0~1的范围内,数据都将除以255。

归一化之后,就是标准化,我们使用Normalize并传入mean和std,公式是:
o u t p u t = i n p u t − m e a n s t d output = \frac{input -mean}{std} output=stdinput−mean

注意!input已经被除255了。

这样就得到了最后的结果。

Q.2 如何访问原始数据

其实数据一直都没有被修改,当你使用

python 复制代码
dst_train = datasets.CIFAR10(data_path, train=True, download=True, transform=transform)

得到一个训练集的时候,原始数据并没有被transform,数据其实一直保存在dst_train.data里

在迭代或者通过下标获取数据时,才会使用transform来修改数据。

这个类维持一个data原始数据,因此有时候如果要修改数据,其实没必要去修改标准化后的数据,直接修改.data即可。

如果有人做的是后门攻击,可以尝试一下重写CIFAR10数据集的类,重写__getitem__ 即可。

相关推荐
回眸&啤酒鸭1 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智1 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
默_笙1 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
AI的探索之旅1 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein1 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu1 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
qq_426003961 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk