Проблема с использованием transforms.FiveCrop () / TenCrop () в PyTorch - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь повысить производительность своей CNN, и поэтому я решил «поиграть» с некоторыми преобразованиями, чтобы увидеть, как они влияют на мою модель.Я читал, что FiveCrop () и TenCrop () могут помочь, потому что они генерируют дополнительные данные для обучения.Однако, когда я пытаюсь обучить модель, используя одно из преобразований, упомянутых выше, я получаю следующую ошибку:

TypeError: pic должно быть PIL Image или ndarray.Получил

В документации этих преобразований содержится только примечание к процедуре тестирования, есть идеи, как это исправить?

Заранее спасибо!

train_transform = transforms.Compose(
    [transforms.ColorJitter(),
     transforms.TenCrop(32),
     transforms.ToTensor(),
     transforms.Normalize((0.4914, 0.4822, 0.4465), (0.247, 0.243, 0.261))
     ])

train = datasets.CIFAR10(root = './data',
                  train = True,
                  transform = train_transform,
                  download = True)

train_loader = torch.utils.data.DataLoader(dataset = train,
                                      batch_size = 1250,
                                      shuffle = True)

for epoch in range(num_of_iterations):
  correct = 0
  acc = 0.0
  running_loss = 0.0
  for i, (images, labels) in enumerate(train_loader):
      images = images.requires_grad_().to(device)
      labels = labels.to(device)

Ошибка возникает в строке второго цикла for

1 Ответ

0 голосов
/ 13 декабря 2018

Правильно, ваша ошибка исходит от tensforms.ToTensor(), который находится непосредственно ниже вашего TenCrop в составленном преобразовании.Он ожидает изображение, но вместо этого получает кортеж культур.Вы должны следовать процедуре, аналогичной показанной в документации, не только для тестирования, но и для обучения, чтобы реорганизовать ваши изображения в ожидаемый формат [batch, feature_maps, width, height].

. В качестве примечания, CIFAR10 уже 32x32пикселей, поэтому взятие 32x32 кадрирования - это операция идентификации.Ваш FiveCrop фактически просто повторяет одно и то же изображение 5 раз, а TenCrop повторяет его 5 раз плюс добавляет 5 перевернутых версий.Вам следует либо уменьшить размер посевов, либо найти другую схему дополнения данных, чтобы увидеть улучшение с обобщением ваших сетей.

...