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