无需使用数据加载器即可转换每个训练点

时间:2019-11-24 11:07:45

标签: python pytorch

我刚刚发现,即使torchvision.dataset.MNIST接受了transformer参数,...

transform = transforms.compose(
    [transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]
)
mnist_trainset = datasets.mnist(
    root="mnist", train=True, download=True, transform=transform
)

...从mnist_trainset.data变量获得的值仍未转换(请注意,对于{{,在(0,255)范围内的数据应归一化为(-1,1)) 1}}的行为。

transformer

我尝试通过[102] mnist_testset.data[0].min() tensor(0, dtype=torch.uint8) [103] mnist_testset.data[0].max() tensor(255, dtype=torch.uint8) 调用mnist_trainset.transform,但是输出形状不是我想要的

mnist_trainset.data

我可以使用[104] mnist_testset.data.shape torch.Size([10000, 28, 28]) [105] transform(mnist_testset.data).shape torch.Size([3, 28, 28]) # Should be [10000, 28, 28] as identical to the original data. 来加载整个训练集并将改组设置为DataLoader,但是我认为这太过分了。使用已定义的False对象转换 entire mnist_testset的最佳方法是什么,而无需手动手动将其转换即可获得所需的转换图像。一个?

1 个答案:

答案 0 :(得分:1)

使用数据集的__getitem__方法对数据集进行采样时,将调用转换。因此,您可以执行以下操作来获取所有转换后的数据。

imgs_transformed = []
for img, label in mnist_testset:
    imgs_transformed.append(img[0,:,:])

或使用列表理解

imgs_transformed = [img[0,:,:] for img, label in mnist_testset]

如果要将其转变为一个大张量,则可以使用torch.stack

data_transformed = torch.stack(imgs_transformed, dim=0)