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 分钟前
动作和画面时间最近,就能配成训练样本吗?
人工智能·深度学习
特立独行的猫A3 分钟前
我用仓颉写了个多平台发文工具:一份 Markdown,一条命令发六个平台
java·后端·python
wangfpp4 分钟前
Skill渐进式披露指南
人工智能
Marco_康5 分钟前
AgentFleet 跨设备调度实测:303 tasks/s,设备掉线 0 丢任务
人工智能
陆陆陆六17 分钟前
# 五个AI引擎的答案采集:反爬、去重与时间窗对齐的三个工程细节
python·net·ai答案采集
QYR_1118 分钟前
年复合增长率11.4%!机器人指端视触觉传感器加速迈向规模化应用
人工智能·数码相机
武天旭39 分钟前
AI安全--AI大模型的数据投毒攻击解析
人工智能·深度学习·安全
AI技术新视界39 分钟前
LLM 提示词缓存(Prompt Caching)的秘密
人工智能·缓存·llm·prompt
火山引擎开发者社区1 小时前
从企业开发者到 Agent 先锋,火山引擎 Agent 先锋计划邀你进击!
人工智能
这张生成的图像能检测吗1 小时前
(论文速读)Ponder:通过神经渲染进行点云预训练
人工智能·深度学习·机器学习·点云·3d技术·神经渲染