Я тестирую набор данных MNIST в Pytorch, и после того, как я применил преобразование к данным X, кажется, что DataLoader выводит все значения из исходного порядка, что потенциально может испортить шаг обучения.
Мое преобразование состоит в том, чтобы разделить все значения на 255. Следует заметить, что само преобразование не меняет позиций, как показано на первых диаграммах рассеяния. Но после того, как данные переданы в DataLoader и я извлек их обратно, они вышли из строя. Если я не сделаю трансформацию, все в порядке (не показано). Распределение значений одинаково между before, after1 (деленное на 255 / до DataLoader) и after2 (деленное на 255 / после DataLoader ) (также не показан), кажется, что это влияет только на порядок.
import torch
from torchvision import datasets
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
transform = transforms.ToTensor()
train = datasets.MNIST(root = '.', train = True, download = True, transform = transform)
test = datasets.MNIST(root = '.', train = False, download = True, transform = transform)
before = train.data[0]
train.data = train.data.float()/255
after1 = train.data[0]
train_loader = torch.utils.data.DataLoader(train, batch_size = 128)
test_loader = torch.utils.data.DataLoader(test, batch_size = 128)
fig, ax = plt.subplots(1, 2)
ax[0].scatter(range(len(before.view(-1))), before.view(-1))
ax[0].set_title('Before')
ax[1].scatter(range(len(after1.view(-1))), after1.view(-1))
ax[1].set_title('After1')
after2 = next(iter(train_loader))[0][0]
fig, ax = plt.subplots(1, 2)
ax[0].scatter(range(len(before.view(-1))), before.view(-1))
ax[0].set_title('Before')
ax[1].scatter(range(len(after2.view(-1))), after2.view(-1))
ax[1].set_title('After2')
fig, ax = plt.subplots(1, 3)
ax[0].imshow(before, cmap = 'gray')
ax[1].imshow(after1, cmap = 'gray')
ax[2].imshow(after2.view(28, 28), cmap = 'gray')
Я знаю, что это может быть не лучший способ справиться с этими данными (transforms.Normalize
должен решить эту проблему), но мне действительно хотелось бы понять, что происходит.
Спасибо!