Говоря о важности нормализации данных в обучении глубокому обучению

искусственный интеллект глубокое обучение PyTorch Нейронные сети

предисловие

Спецификация данных — нормализацияЭто проблема, которую легко игнорировать и легко совершать ошибки в глубоком обучении. Все данные, на которых мы тренируемся, проходят некоторую нормализацию при подаче в модель. Например, в pytorch некоторые модели обучаются на нормализованных данных, поэтому, когда мы используем эти предварительно обученные модели, мы должны обратить внимание на нормализацию данных, прежде чем добавлять в модель собственные данные.

В моделях, которые поставляются с pytorch, мы можем выбратьпредварительно обученная модель:

  1. import torchvision.models as models
    resnet18 = models.resnet18(pretrained=True)
    alexnet = models.alexnet(pretrained=True)
    squeezenet = models.squeezenet1_0(pretrained=True)
    vgg16 = models.vgg16(pretrained=True)
    densenet = models.densenet161(pretrained=True)
    inception = models.inception_v3(pretrained=True)

Предварительно обученная модель, то есть параметры веса в модели были обучены, и вес модели можно считать после построения модели.

Но есть некоторые вещи, о которых нужно знать:

  • Весовые параметры модели обучаются, но убедитесь, что вводимые данные соответствуют формату данных, используемому во время предварительной подготовки.
  • Помните, когда форматирование требуется, а когда нет.

То есть правильный дизайн модели - это только первый шаг. Правильность формата данных изображения, которые мы вводим, также особенно важна. Большинство изображений, которые мы обычно вводим, являются трехканальными цветными изображениями RGB, и большинство из диапазонов данных [0-255], что является 24-битным изображением в обычном смысле (8 бит для каждого из трех каналов RGB). В pytorch есть специальные модули:transformsмодуль для выполнения некоторых операций предварительной обработки изображения:

transform = transforms.Compose([
        transforms.RandomResizedCrop(100),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ])

текст

И в официальном представлении pytorch также упоминается, что данные, соответствующие модели предварительного обучения, используемой pytorch, должны быть:

《浅谈深度学习训练中数据规范化(Normalization)的重要性》

То есть 3-канальное RGB-изображение (3 х В х Ш), причем высота и ширина желательно не менее 224 (т. размер данных изображения [0-1], используйте среднее и стандартное значение для нормализации.

Чиновник также сказал, почему это сказано, потому что все предобучающие модели получаются с использованием нормализованных данных, поэтому данные, которые мы вводим, также должны быть отформатированы, иначе легко получить взрыв потерь.

Зачем нам его форматировать?

В качестве примера возьмем группу изображений лиц Формат этой группы изображений лиц следующий:

  • Сделайте 100 наборов изображений лица
  • Высота и ширина изображения равны 100.
  • 3 канала, диапазон пикселей [0-255]

отсюда изLabeled faces in the WildИз набора данных берутся 100 изображений лиц, каждому изображению в этом наборе данных соответствует имя, и лицо каждого изображения расположено почти посередине.

《浅谈深度学习训练中数据规范化(Normalization)的重要性》

После того, как у нас есть этот набор данных, следующие шаги, как правило, следующие:

Единая форма и размер

Прежде чем вводить изображение в нейронную сеть, важно отметить, что каждое изображение должно быть гарантированно одинакового размера и размера. Большинство моделей требуют, чтобы форма входного изображения была квадратной, обычно 256 x 256, 128 x 128, 64 x 64 или другие формы, которые лучше всего подходят для обучения. Конечно, возможны и другие формы, например, прямоугольник, но если это прямоугольник, вам следует обратить внимание на дизайн канала сверточного слоя. Короче говоря, мы сначала обрезаем полярность изображения, обрезаем кадрирование в квадрат и обычно занимаем центральное положение изображения.

《浅谈深度学习训练中数据规范化(Normalization)的重要性》

Например, следующее изображение лица (256 x 256) очень удобно, потому что его не нужно обрезать.

《浅谈深度学习训练中数据规范化(Normalization)的重要性》

масштаб изображения

Пропорция также более важна, форма изображения определяется, но иногда, когда мы тренируемся, поскольку слой свертки становится все глубже и глубже, карта признаков становится все меньше и меньше.Для достижения некоторых функций пропорция изображения, которую мы нужно также немного меньше. При увеличении или уменьшении масштаба, при уменьшении масштаба до 100 пикселей, мы умножаем изображение выше на 0,39 (100/256). Тем не менее, при увеличении и уменьшении масштаба необходимо учитывать скругление, и будь то пол или потолок, имеет свою перспективу.

среднее, дисперсия

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

После нормализации таким образом в процессе обучения нейронной сети влияние градиента на каждое изображение среднее, то есть пропорционального несоответствия нет. Перед нормализацией распределение признаков каждого изображения отличается, некоторые из них крутые, а некоторые плоские.Если предварительная обработка не выполняется, то значения признаков некоторых изображений относительно велики, а некоторые относительно малы во время градиентного спуска, так что градиент Операция не может учитывать нисходящий тренд различных функций, разных размеров и разных уровней, поэтому ее трудно тренировать, и потери будут продолжать колебаться.

《浅谈深度学习训练中数据规范化(Normalization)的重要性》

Форматирование (нормализация)

Говоря о сути форматирования, которое мы упоминали в начале статьи, на самом деле даже в наборе изображений пиксели каждого изображения сначала вычитаются из пикселей среднего значения всех изображений, а затем делятся на дисперсию . Это гарантирует, что все распределения изображений будут схожими, то есть легче сходятся во время обучения, то есть быстрее и качественнее обучение. Кроме того, среднее значение и стандартное значение различных диапазонов пикселей изображения различны.Как правило, мы вводим данные изображения [0-1] или [0-255].В модели pytorch ввод [0-1]], и в модели caffe мы вводим [0-255].

На следующем рисунке представлены 100 изображений лиц после форматирования.

《浅谈深度学习训练中数据规范化(Normalization)的重要性》

Очевидно, что форматирование предназначено для выравнивания центров обработки данных, как, например, на диаграмме в cs231n, слева — исходные данные, посередине — распределение данных за вычетом среднего, а справа — распределение данных, деленное на дисперсию станд. конечно, в cs231n деление на std на самом деле может быть Не делайте этого, потому что пока данные следуют определенному диапазону (например, все изображения [0-255]), в этом нет необходимости.

《浅谈深度学习训练中数据规范化(Normalization)的重要性》

размерное изменение

Иногда вход не является цветным изображением.В это время может быть необходимо выполнить операции уменьшения размерности данных, то есть RGB->GRAY.Конечно, есть также изменения в цветовых каналах и цветовых каналах, таких как RGB->BGR или RGB->YUV. Цветовые каналы меняются для достижения различных задач и функций, которые определяются в каждом конкретном случае.

《浅谈深度学习训练中数据规范化(Normalization)的重要性》

Другие изменения: увеличение данных

В модуль преобразований pytorch внесено множество изменений, которые можно использовать для улучшения данных, таких как переворот изображения, вращение и преобразование полярных координат, которые могут получать разные «исходные изображения» для увеличения переменных обучения для достижения хорошего эффекта обучения. . Здесь особо нечего сказать, это нужно пояснить отдельно.

Справочная статья

стать человеком.love/image-data-…

На данный момент 231 you.GitHub.IO/neural-net…

Статья взята из блога OLDPAN, добро пожаловать в гости:Блог Олдпан

Добро пожаловать, чтобы обратить внимание на общедоступную учетную запись блога Oldpan и продолжать готовить статьи о глубоком обучении: