我是Pythorch的新人,想了解一些事情。在
我正在加载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]
,我得到的张量在[0255]范围内,形状为(28,28)。在
我错过了什么?这是因为转换不是直接应用于dataloader,而是只在运行时应用的吗?否则,我如何浏览我的数据?在
当调用
Dataset
的__getitem__
方法时,将应用这些转换。例如,看看MNIST
数据集类的__getitem__
方法:https://github.com/pytorch/vision/blob/master/torchvision/datasets/mnist.py#L62当您索引训练集的
^{pr2}$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]
调用中。在显示
相关问题 更多 >
编程相关推荐