После того, как вы задаете слои вашей нейронной сети, как описано в Specify Layers of Сверточную Нейронную Сеть, следующим шагом является настройка опций обучения для сети. Используйте trainingOptions
функция для определения глобальных параметров обучения. Чтобы обучить сеть, используйте объект, возвращенный trainingOptions
как входной параметр к trainNetwork
функция. Для примера:
options = trainingOptions('adam'); trainedNet = trainNetwork(data,layers,options);
Слои с настраиваемыми параметрами также имеют опции для настройки параметров обучения. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».
trainNetwork
может использовать различные варианты стохастического градиентного спуска для обучения сети. Задайте алгоритм оптимизации при помощи solverName
аргумент trainingOptions
. Чтобы минимизировать потери, эти алгоритмы обновляют параметры сети, делая небольшие шаги в направлении отрицательного градиента функции потерь.
The 'adam'
(выведенный из оценки адаптивного момента) решатель часто является хорошим оптимизатором, чтобы попробовать сначала. Можно также попробовать 'rmsprop'
(среднее корневое квадратное распространение) и 'sgdm'
(стохастический градиентный спуск с импульсом) оптимизаторы и увидеть, улучшает ли это обучение. Другие решатели работают лучше для разных задач. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.
Решатели обновляют параметры, используя подмножество данных каждый шаг. Это подмножество называется мини-пакетом. Размер мини-пакета можно задать при помощи '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'
Требуется Parallel Computing Toolbox™. Для обучения на графическом процессоре требуется поддерживаемое устройство. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (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