Правильный способ нормализации изображений для автоэнкодера в PyTorch? - PullRequest
0 голосов
/ 01 апреля 2020

Я не уверен, правильно ли я нормализую изображения в нужном измерении перед подачей его в авто-кодер в PyTorch.

Набор данных:

I ' м, используя набор данных Omniglot, который содержит 20 выборок, каждый из 964 символов, и каждый символ равен 105 * 105 * 1 (в оттенках серого).

Перед тем, как передать данные обучения в автоэнкодер, он имеет такую ​​форму:

Xtrain.shape = (964, 20, 105, 105)

Как я в настоящее время вычисляю среднее и стандартное значения и применяю преобразование:

class OmniglotDataset(Dataset):

    def __init__(self, X, transform=None):
        self.X = X.reshape(-1, 105, 105)
        self.transform = transform

    def __len__(self):
        return self.X.shape[0]

    def __getitem__(self, idx):
        if torch.is_tensor(idx):
            idx = idx.tolist()
        img = self.X[idx]
        if self.transform:
            img = self.transform(img)
        return img

X1 = Xtrain.reshape(-1, 105, 105)
mean = X1.mean(axis=0).mean()
std = X1.mean(axis=0).std()
batch_size = 128
img_transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((mean,), (std,))
])

train_dataset = OmniglotDataset(Xtrain, transform=img_transform)
train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)

Вопросы:

  1. Правильно ли я применяю здесь нормализацию?
  2. Существует ли более быстрый способ вычисления среднего и стандартного значения?
...