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

相关推荐
智驭未来掌门人几秒前
AI+行业赋能,到底什么才算落地?——一个差旅差标项目的深度自省
人工智能
import_random2 分钟前
[python]conda和pip(区别和联系2)
python
不会是要长脑子了吧11 分钟前
ChatGPT 网页端报 “Model not found“
人工智能·chatgpt
Aurorar0rua13 分钟前
CS50 x 2024 Notes Python - 01
开发语言·python·学习方法
史努比的蓝色皮肤21 分钟前
从 ChatGPT 到 Agent :AI 发展脉络
人工智能·chatgpt
kyriewen23 分钟前
我扒了 npm 三年数据:AI 没把依赖变胖,是把包变多了
前端·人工智能·程序员
面包狗AI4S27 分钟前
ChatGPT/Codex Windows:本地桌面端应用离线包安装与免安装启动方法(无需管理员权限)
人工智能·windows·ai·chatgpt
龙粤GEO28 分钟前
RAG检索机制如何影响AI引用?一次SaaS品牌GEO优化实战复盘
人工智能
编码小哥30 分钟前
YOLO26深度解析:为边缘计算而生的新一代实时视觉模型
人工智能·边缘计算
前端.火鸡37 分钟前
Embedding:机器是怎么“理解“语义的
人工智能·embedding