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__ 即可。

相关推荐
浣熊-论文指导3 分钟前
人工智能与生物医药融合六大创新思路
论文阅读·人工智能·深度学习·计算机网络·机器学习
自动化小秋葵7 分钟前
Python入门经典题目
开发语言·python
文火冰糖的硅基工坊9 分钟前
[人工智能-大模型-48]:模型层技术 - 大模型与大语言模型不是一回事
人工智能·语言模型·自然语言处理
居7然15 分钟前
DeepSeek OCR:重新定义AI文档处理的“降本增效”新范式
人工智能·算法·语言模型·自然语言处理·大模型·ocr
while(1){yan}23 分钟前
数据结构之堆
数据结构·python·算法
xingxing_F35 分钟前
Topaz Video AI for Mac AI视频无损放大 视频画质增强
人工智能·macos·音视频
普蓝机器人1 小时前
面向智慧农业的自主移动果蔬采摘机器人:融合视觉识别与自动驾驶的智能化农作系统研究
人工智能·学习·机器人·移动机器人·三维仿真导航
卷福同学1 小时前
AI浏览器comet拉新,一单20美元(附详细教程)
人工智能·后端
凌晨一点的秃头猪1 小时前
Python 常见 bug 总结和异常处理
开发语言·python·bug
mortimer1 小时前
用PySide6 构建一个响应式视频剪辑工具:多线程与信号机制实战
python·ffmpeg·pyqt