Настройте параметры и обучите сверточную нейронную сеть

После того, как вы задаете слои своей нейронной сети, как описано в, Задают Слои Сверточной Нейронной сети, следующий шаг должен настроить опции обучения для сети. Используйте функцию trainingOptions, чтобы задать глобальные учебные параметры. Чтобы обучить сеть, используйте объект, возвращенный trainingOptions как входной параметр к функции trainNetwork. Например:

options = trainingOptions('adam');
trainedNet = trainNetwork(data,layers,options);

Слои с learnable параметрами также имеют опции для корректировки параметров изучения. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.

Задайте решатель и максимальное количество эпох

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

'adam' (выведенный от адаптивной оценки момента) решатель часто является хорошим оптимизатором, чтобы попробовать сначала. Можно также попробовать 'rmsprop' (среднеквадратичное распространение) и 'sgdm' (стохастический спуск градиента с импульсом) оптимизаторы и видеть, улучшает ли это обучение. Другие решатели работают лучше на различные проблемы. Для получения дополнительной информации о других решателях, смотрите Стохастический Спуск Градиента.

Решатели обновляют параметры с помощью подмножества данных каждый шаг. Это подмножество называется мини-пакетом. Можно задать размер мини-пакета при помощи аргумента пары "имя-значение" 'MiniBatchSize' trainingOptions. Каждое обновление параметра называется итерацией. Вся передача через целый набор данных называется эпохой. Можно задать максимальное количество эпох, чтобы обучаться для при помощи аргумента пары "имя-значение" 'MaxEpochs' trainingOptions. Значение по умолчанию равняется 30, но можно выбрать меньшее число эпох для маленьких сетей или для изучения подстройки и передачи, где большая часть изучения уже сделана.

По умолчанию программное обеспечение переставляет данные однажды обучение. Можно изменить эти настройки при помощи аргумента пары "имя-значение" 'Shuffle'.

Задайте и измените темп обучения

Можно задать глобальный темп обучения при помощи аргумента пары "имя-значение" 'InitialLearnRate' trainingOptions. По умолчанию trainNetwork использует это значение в течение целого учебного процесса. Можно принять решение изменить темп обучения каждое определенное число эпох путем умножения темпа обучения с фактором. Вместо того, чтобы использовать небольшой, фиксированный темп обучения в течение учебного процесса, можно выбрать больший темп обучения в начале обучения и постепенно уменьшать это значение во время оптимизации. Выполнение так может сократить учебное время при включении меньших шагов к минимуму потери, в то время как обучение прогрессирует.

Совет

Если мини-пакетная потеря во время обучения когда-нибудь становится NaN, то темп обучения, вероятно, слишком высок. Попытайтесь уменьшать темп обучения, например, фактором 3, и перезапустить сетевое обучение.

Чтобы постепенно уменьшать темп обучения, используйте аргумент пары "имя-значение" 'LearnRateSchedule','piecewise'. Если вы выбираете эту опцию, trainNetwork умножает начальный темп обучения на фактор 0,1 каждых 10 эпох. Можно задать фактор, которым можно уменьшать начальный темп обучения и номер эпох при помощи аргументов пары "имя-значение" 'LearnRateDropFactor' и 'LearnRateDropPeriod', соответственно.

Задайте данные о валидации

Чтобы выполнить сетевую валидацию во время обучения, задайте данные о валидации с помощью аргумента пары "имя-значение" 'ValidationData' trainingOptions. По умолчанию trainNetwork подтверждает сеть каждые 50 итераций путем предсказания ответа данных о валидации и вычисления потери валидации и точности (среднеквадратическая ошибка для сетей регрессии). Можно изменить частоту валидации с помощью аргумента пары "имя-значение" 'ValidationFrequency'. Если ваша сеть имеет слои, которые ведут себя по-другому во время прогноза, чем во время обучения (например, слои уволенного), то точность валидации может быть выше, чем учебная (мини-пакетная) точность. Можно также использовать данные о валидации, чтобы остановить обучение автоматически, когда потеря валидации прекращает уменьшаться. Чтобы включить автоматическую остановку валидации, используйте аргумент пары "имя-значение" 'ValidationPatience'.

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

Чтобы уменьшать сверхподбор кривой, можно попытаться добавить увеличение данных. Используйте augmentedImageDatastore, чтобы выполнить случайные преобразования на ваших входных изображениях. Это помогает препятствовать тому, чтобы сеть запомнила точное положение и ориентацию объектов. Можно также попытаться увеличить регуляризацию L2 с помощью аргумента пары "имя-значение" 'L2Regularization', с помощью пакетных слоев нормализации после сверточных слоев, и добавив слои уволенного.

Выберите Hardware Resource

Если графический процессор доступен, то trainNetwork использует его для обучения по умолчанию. В противном случае trainNetwork использует центральный процессор. Также можно задать среду выполнения, вы хотите использовать аргумент пары "имя-значение" 'ExecutionEnvironment'. Можно задать один центральный процессор ('cpu'), один графический процессор ('gpu'), несколько графических процессоров ('multi-gpu') или локальный параллельный пул или вычислить кластер ('parallel'). Все опции кроме 'cpu' требуют Parallel Computing Toolbox™. Обучение на графическом процессоре требует, чтобы CUDA® включил графический процессор с, вычисляют возможность 3.0 или выше.

Сохраните сети контрольной точки и возобновите обучение

Deep Learning Toolbox™ позволяет вам сохранить сети как .mat файлы после каждой эпохи во время обучения. Это периодическое сохранение особенно полезно, когда у вас есть большая сеть или большой набор данных, и обучение занимает много времени. Если обучение прервано по некоторым причинам, можно возобновить обучение от последней сохраненной сети контрольной точки. Если вы хотите, чтобы trainNetwork сохранил сети контрольной точки, то необходимо задать имя пути при помощи аргумента пары "имя-значение" 'CheckpointPath' trainingOptions. Если путь, который вы задаете, не существует, то trainingOptions возвращает ошибку.

trainNetwork автоматически присваивает уникальные имена, чтобы отметить сетевые файлы контрольной точкой. На имя в качестве примера net_checkpoint__351__2018_04_12__18_09_52.mat, 351 является номером итерации, 2018_04_12 является датой, и 18_09_52 является временем, в которое trainNetwork сохраняет сеть. Можно загрузить сетевой файл контрольной точки путем двойного клика по нему или использования команды загрузки в командной строке. Например:

load net_checkpoint__351__2018_04_12__18_09_52.mat
Можно затем возобновить обучение при помощи слоев сети как входной параметр к trainNetwork. Например:

trainNetwork(XTrain,YTrain,net.Layers,options)
Необходимо вручную задать опции обучения и входные данные, потому что сеть контрольной точки не содержит эту информацию. Для примера смотрите Обучение Резюме от Сети Контрольной точки.

Настройте параметры в сверточном и полносвязных слоях

Можно установить параметры изучения, чтобы отличаться от глобальных значений, заданных trainingOptions в слоях с learnable параметрами, такой как сверточные и полносвязные слоя. Например, чтобы настроить темп обучения для смещений или весов, можно задать значение для свойств BiasLearnRateFactor или WeightLearnRateFactor слоя, соответственно. Функция trainNetwork умножает темп обучения, который вы задаете при помощи trainingOptions с этими факторами. Точно так же можно также задать факторы регуляризации L2 для весов и смещений в этих слоях путем определения свойств BiasL2Factor и WeightL2Factor, соответственно. trainNetwork затем умножает факторы регуляризации L2, которые вы задаете при помощи trainingOptions с этими факторами.

Инициализируйте веса в сверточном и полносвязных слоях

Веса слоя являются learnable параметрами. Можно задать начальное значение для весов непосредственно с помощью свойства Weights слоя. При обучении сети, если свойство Weights слоя непусто, то trainNetwork использует свойство Weights в качестве начального значения. Если свойство Weights пусто, то trainNetwork использует инициализатор, заданный свойством WeightsInitializer слоя.

Обучите свою сеть

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

layers = [imageInputLayer([28 28 1])
          convolution2dLayer(5,20)
          reluLayer
          maxPooling2dLayer(2,'Stride',2)
          fullyConnectedLayer(10)
          softmaxLayer
          classificationLayer];
options = trainingOptions('adam');
convnet = trainNetwork(data,layers,options);

Данные тренировки могут быть массивом, таблицей или объектом ImageDatastore. Для получения дополнительной информации смотрите страницу ссылки на функцию trainNetwork.

Смотрите также

| | |

Похожие темы