我是pytorch的新手,想要了解一些东西 .
我正在加载MNIST如下:
transform_train = transforms.Compose(
[transforms.ToTensor(),
transforms.Resize(size, interpolation=2),
# transforms.Grayscale(num_output_channels=1),
transforms.RandomHorizontalFlip(p=0.5),
transforms.Normalize((mean), (std))])
trainset = torchvision.datasets.MNIST(root='./data', train=True,
download=True, transform=transform_train)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size,
shuffle=True, num_workers=2)
然而,当我探索数据集,即 trainloader.dataset.train_data[0]
时,我得到了一个范围[0,255]的张量与形状(28,28) .
我错过了什么?这是因为转换不是直接应用于数据加载器而是仅在运行时?如何以其他方式浏览我的数据?
1 回答
当调用
Dataset
的__getitem__
方法时,将应用变换 . 例如,查看MNIST
数据集类的__getitem__
方法:https://github.com/pytorch/vision/blob/master/torchvision/datasets/mnist.py#L62当您为训练集索引
MNIST
实例时,会调用__getitem__
方法,例如:有关
__getitem__
的更多信息:https://docs.python.org/3.6/reference/datamodel.html#object.getitemResize
和RandomHorizontalFlip
应该在ToTensor
之前的原因是它们作用于PIL Images并且Pytorch中的所有数据集一致性首先将数据加载为PIL Image
. 事实上,你可以看到他们在这里通过以下方式强制执行:获得相应索引的
PIL Image
后,将应用变换ToTensor
将PIL Image
转换为torch.Tensor
并Normalize
减去均值并除以您提供的标准差 .最终,一些变换应用于标签
最后返回处理过的图像和处理过的标签 . 所有这些都发生在一个
trainset[key]
电话中 .节目