即使在随机仿射(pytorch)之后,数据集也没有变化

there is no chage to the dataset even after random affine (pytorch)

我下载了两个版本的 mnist 数据集:一个没有任何转换,一个有随机仿射和归一化。

w/o转换代码:

mnist_train = torchvision.datasets.MNIST(root='MNIST_data/', 
                          train=True, 
                          transform=transforms.ToTensor(), 
                          download=True)

转换代码:

train_transforms = transforms.Compose(
    [transforms.RandomAffine(degrees=30),
     transforms.ToTensor(),
     transforms.Normalize(mean=(0.5,), std=(0.5,))])

augmented_data = torchvision.datasets.MNIST(root='aug_data/',
                                        train=True,
                                        transform=train_transforms,
                                        download=True)

我从这两个打印了几个样本,但结果都是一样的。 有人能找出原因吗??

谢谢

没有增强的 MNIST 数据集,download=True 只是在您指定的 root 中下载相同的普通 MNIST 数据集。

当您访问数据集的元素时,将在线应用转换,例如augmented_data[0]。这样,你指定的变换就应用到MNIST的第一张图片上了。

因此,如果你想检查差异,你必须使用一些可视化工具显示以这种方式访问​​的图像,例如通过使用 matplotlib.imshow:

代码

import torch
import torchvision
from torchvision import transforms
import matplotlib.pyplot as plt

mnist_train = torchvision.datasets.MNIST(root='MNIST_data/', 
                          train=True, 
                          transform=transforms.ToTensor(), 
                          download=True)

train_transforms = transforms.Compose(
    [transforms.RandomAffine(degrees=30),
     transforms.ToTensor(),
     transforms.Normalize(mean=(0.5,), std=(0.5,))])

# you can use the same root, since the data is the same
augmented_data = torchvision.datasets.MNIST(root='MNIST_data/',  
                                        train=True,
                                        transform=train_transforms,
                                        download=True)

im = mnist_train[0][0][0]
aug_im = augmented_data[0][0][0]

# Normal image
plt.imshow(im, cmap="gray")
plt.colorbar()
plt.show()

# Agumented image
plt.imshow(aug_im, cmap="gray")
plt.colorbar()
plt.show()

结果

普通图像

增强图像

请注意 right-sided 颜色条中值范围的差异。