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

相关推荐
ujainu9 分钟前
CANN仓库中的AIGC多模态统一抽象工程:昇腾AI软件栈如何用一套接口驾驭图文音视
人工智能·aigc
少云清11 分钟前
【金融项目实战】7_接口测试 _代码实现接口测试(重点)
python·金融项目实战
深蓝电商API11 分钟前
爬虫IP封禁后的自动切换与检测机制
爬虫·python
m0_5500246313 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦14 分钟前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
液态不合群16 分钟前
推荐算法中的位置消偏,如何解决?
人工智能·机器学习·推荐算法
饭饭大王66620 分钟前
当 AI 系统开始“自省”——在 `ops-transformer` 中嵌入元认知能力
人工智能·深度学习·transformer
ujainu20 分钟前
CANN仓库中的AIGC可移植性工程:昇腾AI软件栈如何实现“一次开发,多端部署”的跨生态兼容
人工智能·aigc
初恋叫萱萱22 分钟前
CANN 生态实战指南:从零构建一个高性能边缘 AI 应用的完整流程
人工智能
Lethehong25 分钟前
CANN ops-nn仓库深度解读:AIGC时代的神经网络算子优化实践
人工智能·神经网络·aigc