После определения уровней нейронной сети, как описано в разделе Определение слоев сверточной нейронной сети, следующим шагом будет настройка параметров обучения для сети. Используйте trainingOptions для определения глобальных параметров обучения. Для обучения сети используйте объект, возвращенный trainingOptions в качестве входного аргумента для trainNetwork функция. Например:
options = trainingOptions('adam');
trainedNet = trainNetwork(data,layers,options);Слои с обучаемыми параметрами также имеют опции для настройки параметров обучения. Дополнительные сведения см. в разделе Настройка параметров в сверточных и полностью соединенных слоях.
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' аргумент пары имя-значение, используя слои нормализации пакета после сверточных слоев и добавляя выпадающие слои.
Если графический процессор доступен, то trainNetwork по умолчанию использует его для обучения. В противном случае trainNetwork использует ЦП. Кроме того, можно указать требуемую среду выполнения с помощью 'ExecutionEnvironment' аргумент пары имя-значение. Можно указать один ЦП ('cpu'), один графический процессор ('gpu'), несколько графических процессоров ('multi-gpu') или локальный параллельный пул или вычислительный кластер ('parallel'). Все варианты, кроме 'cpu' Требуется Toolbox™ параллельных вычислений. Для обучения на GPU требуется поддерживаемое устройство GPU. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox).
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 в командной строке. Например:
load net_checkpoint__351__2018_04_12__18_09_52.mat
trainNetwork. Например:trainNetwork(XTrain,YTrain,net.Layers,options)
Можно установить параметры обучения, отличающиеся от глобальных значений, указанных в trainingOptions в слоях с обучаемыми параметрами, такими как сверточные и полностью соединенные слои. Например, чтобы настроить скорость обучения для смещений или весов, можно указать значение для BiasLearnRateFactor или WeightLearnRateFactor свойства слоя соответственно. trainNetwork функция умножает скорость обучения, указанную с помощью trainingOptions с этими факторами. Аналогично, можно также указать коэффициенты регуляризации L2 для весов и смещений в этих слоях, указав BiasL2Factor и WeightL2Factor соответственно. trainNetwork затем умножает L2 коэффициенты регуляризации, указанные с помощью trainingOptions с этими факторами.
Веса слоев являются обучаемыми параметрами. Можно указать начальное значение для весов непосредственно с помощью 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 страница ссылки на функцию.
Convolution2dLayer | FullyConnectedLayer | trainingOptions | trainNetwork