После того, как вы задаете слои своей нейронной сети, как описано в, Задают Слои Сверточной Нейронной сети, следующий шаг должен настроить опции обучения для сети. Используйте функцию 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'
, с помощью пакетных слоев нормализации после сверточных слоев, и добавив слои уволенного.
Если графический процессор доступен, то 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
.
Convolution2dLayer
| FullyConnectedLayer
| trainNetwork
| trainingOptions