我在导入torchvision的datasets中的数据集时包含了transform这个参数用于数据预处理,但是我实际在使用的时候发现我的数据并没有被处理,这是怎么回事呢?
import torchvision.datasets as datasets
import torchvision.transforms as transforms
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = datasets.CIFAR10(root='./CIFAR10', train=True,
download=True, transform=transform)
print(trainset.data)
[[ 59 62 63]
[ 43 46 45]
[ 50 48 43]
[158 132 108]
[152 125 102]
[148 124 103]]
[[ 16 20 20]
[ 0 0 0]
[ 18 8 0]
我自己写一个Dataset是可以实现图像的预处理的,但是用torchvision这个自带的不知道为什么就没有效果
请问下这是咋回事儿
稍微钻进 datasets.CIFAR10
类的实现 https://pytorch.org/vision/stable/_modules/torchvision/datasets/cifar.html#CIFAR10,你能看到 transform
是以 lazy 的方式调用,即在 __getitem__
时才会应用。
所以你直接用 .data
字段获取的是没有经过 transform
处理的数据,你应该使用 for data in trainset
或者 trainset[0]
等方式获取数据。