Я не уверен, правильно ли я нормализую изображения в нужном измерении перед подачей его в авто-кодер в 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)
Вопросы:
- Правильно ли я применяю здесь нормализацию?
- Существует ли более быстрый способ вычисления среднего и стандартного значения?