Для чего используются преобразования в PyTorch? - PullRequest
0 голосов
/ 24 апреля 2018

Я новичок в Pytorch и не очень разбираюсь в CNN.Я сделал успешный классификатор с помощью учебника, который они предоставляют Tutorial Pytorch , но я не совсем понимаю, что я делаю при загрузке данных.

Они делают некоторое увеличение и нормализацию данныхдля обучения, но когда я пытаюсь изменить параметры, код не работает.

# Data augmentation and normalization for training
# Just normalization for validation
data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

Расширяю ли я свой тренировочный набор данных?Я не вижу увеличения данных.

Почему, если я изменяю значение transforms.RandomResizedCrop (224), загрузка данных перестает работать?

Нужно ли также преобразовывать набор тестовых данных?

Я немного запутался с этим преобразованием данных, которое они делают.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

В случае двусмысленности в отношении увеличения данных, я бы отослал вас к этому ответу:

Увеличение данных в PyTorch

Но вкратце, предположим, что у вас есть только случайное горизонтальное переключениетрансформировать, когда вы перебираете набор данных изображений, некоторые возвращаются как оригинальные, а некоторые возвращаются как перевернутые (исходные изображения для перевернутых не возвращаются).Другими словами, количество возвращаемых изображений за одну итерацию совпадает с исходным размером набора данных и не увеличивается.

0 голосов
/ 24 апреля 2018

transforms.Compose только клубит все предоставленные ему преобразования.Таким образом, все преобразования в transforms.Compose применяются к входу один за другим.

Преобразование поезда

  1. transforms.RandomResizedCrop(224): Это извлечет патч размером (224, 224) из вашего входного изображения случайным образом.Таким образом, он может выбрать этот путь сверху вниз, справа внизу или где-нибудь между ними.Итак, вы делаете увеличение данных в этой части.Кроме того, изменение этого значения не подойдет для полностью связанных слоев в вашей модели, поэтому не рекомендуется изменять это.
  2. transforms.RandomHorizontalFlip(): как только у нас будет изображение размером (224, 224), мы можемвыбрать, чтобы перевернуть это.Это еще одна часть увеличения данных.
  3. transforms.ToTensor(): это просто преобразует ваше входное изображение в тензор PyTorch.
  4. transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]): это просто масштабирование входных данных и эти значения (среднее иstd) должно быть предварительно вычислено для вашего набора данных.Изменять эти значения также не рекомендуется.

Проверочные преобразования

  1. transforms.Resize(256): сначала размер входного изображения изменяется до размера (256, 256)
  2. transforms.CentreCrop(224): обрезает центральную часть изображения формы (224, 224)

Отдых такой же, как у поезда

PS: Вы можете узнать больше об этих преобразованиях в официальные документы

...