Опции для обучения глубокой нейронной сети
возвращает опции обучения для оптимизатора, заданные options
= trainingOptions(solverName
)solverName
. Чтобы обучить сеть, используйте опции обучения как входного параметра для trainNetwork
функция.
возвращает опции обучения с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".options
= trainingOptions(solverName
,Name,Value
)
Создайте набор опций для настройки сети с помощью стохастического градиентного спуска с импульсом. Уменьшите скорость обучения в множитель 0,2 каждые 5 эпох. Установите максимальное количество эпох для обучения в 20 и используйте мини-пакет с 64 наблюдениями при каждой итерации. Включите график процесса обучения.
options = trainingOptions('sgdm', ... 'LearnRateSchedule','piecewise', ... 'LearnRateDropFactor',0.2, ... 'LearnRateDropPeriod',5, ... 'MaxEpochs',20, ... 'MiniBatchSize',64, ... 'Plots','training-progress')
options = TrainingOptionsSGDM with properties: Momentum: 0.9000 InitialLearnRate: 0.0100 LearnRateSchedule: 'piecewise' LearnRateDropFactor: 0.2000 LearnRateDropPeriod: 5 L2Regularization: 1.0000e-04 GradientThresholdMethod: 'l2norm' GradientThreshold: Inf MaxEpochs: 20 MiniBatchSize: 64 Verbose: 1 VerboseFrequency: 50 ValidationData: [] ValidationFrequency: 50 ValidationPatience: Inf Shuffle: 'once' CheckpointPath: '' ExecutionEnvironment: 'auto' WorkerLoad: [] OutputFcn: [] Plots: 'training-progress' SequenceLength: 'longest' SequencePaddingValue: 0 SequencePaddingDirection: 'right' DispatchInBackground: 0 ResetInputNormalization: 1 BatchNormalizationStatistics: 'population'
Когда вы обучаете сети для глубокого обучения, часто полезно контролировать процесс обучения. Путем построения графиков различных метрик во время обучения можно узнать, как прогрессирует обучение. Например, можно определить, улучшается ли и как быстро точность сети, и начинает ли сеть перегружать обучающие данные.
Когда вы задаете 'training-progress'
как 'Plots'
значение в trainingOptions
и начните сетевое обучение, trainNetwork
создает рисунок и отображает метрики обучения при каждой итерации. Каждая итерация является оценкой градиента и обновлением параметров сети. Если вы задаете данные валидации в trainingOptions
, затем рисунок показывает метрики валидации каждый раз trainNetwork
проверяет сеть. Рисунок изображает следующее:
Точность обучения - Классификационная точность на каждом отдельном мини-пакете.
Сглаженная точность обучения - сглаженная точность обучения, получаемая путем применения алгоритма сглаживания к точности обучения. Он менее шумен, чем немодированная точность, что облегчает определение трендов.
Точность валидации - точность классификации на целом наборе валидации (задается с помощью trainingOptions
).
Потеря обучения, сглаженная потеря обучения и потеря валидации - потеря на каждом мини-пакете, его сглаженная версия и потеря на наборе валидации, соответственно. Если конечным слоем сети является classificationLayer
, тогда функция потерь является потерей перекрестной энтропии. Для получения дополнительной информации о функциях потерь для задач классификации и регрессии, смотрите Выходные слои.
Для регрессионных сетей рисунок строит график среднеквадратичной ошибки (RMSE) вместо точности.
Рисунок помечает каждую эпоху обучения с помощью затененного фона. Эпоха является полным прохождением всего набора данных.
Во время обучения можно остановить обучение и вернуть текущее состояние сети, нажав кнопку стоп в правом верхнем углу. Например, можно хотеть остановить обучение, когда точность сети достигает плато, и ясно, что точность больше не улучшается. После нажатия кнопки stop может потребоваться некоторое время для завершения обучения. Когда обучение завершено, trainNetwork
возвращает обученную сеть.
Когда обучение завершается, просмотрите Результаты, показывающие окончательную точность валидации и причины завершения обучения. Метрики окончательной валидации помечены на графиках как Final. Если ваша сеть содержит слои нормализации партии ., итоговые метрики валидации могут отличаться от метрик валидации, оцененных во время обучения. Это связано с тем, что среднее значение статистики отклонений, используемой для нормализации партии ., может отличаться после завершения обучения. Для примера, если 'BatchNormalizationStatisics'
опция обучения 'population'
затем после обучения программное обеспечение завершает статистику нормализации партии . путем повторной передачи обучающих данных и использует полученное среднее значение и отклонение. Если на 'BatchNormalizationStatisics'
опция обучения 'moving'
затем программное обеспечение аппроксимирует статистику во время обучения с помощью текущей оценки и использует последние значения статистики.
Справа просмотрите информацию о времени и настройках обучения. Чтобы узнать больше об опциях обучения, см. Раздел «Настройка параметров» и «Train сверточной нейронной сети».
Стройте графики процесса обучения во время обучения
Обучите сеть и постройте график процесса обучения во время обучения.
Загрузите обучающие данные, которые содержат 5000 изображений цифр. Выделите 1000 изображений для валидации сети.
[XTrain,YTrain] = digitTrain4DArrayData; idx = randperm(size(XTrain,4),1000); XValidation = XTrain(:,:,:,idx); XTrain(:,:,:,idx) = []; YValidation = YTrain(idx); YTrain(idx) = [];
Создайте сеть, чтобы классифицировать цифровые данные изображения.
layers = [ imageInputLayer([28 28 1]) convolution2dLayer(3,8,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,16,'Padding','same') batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,32,'Padding','same') batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];
Укажите опции сетевого обучения. Чтобы проверить сеть на регулярных интервалах во время обучения, укажите данные валидации. Выберите 'ValidationFrequency'
значение таким образом, чтобы сеть проверялась примерно один раз в эпоху. Чтобы построить график процесса обучения во время обучения, задайте 'training-progress'
как 'Plots'
значение.
options = trainingOptions('sgdm', ... 'MaxEpochs',8, ... 'ValidationData',{XValidation,YValidation}, ... 'ValidationFrequency',30, ... 'Verbose',false, ... 'Plots','training-progress');
Обучите сеть.
net = trainNetwork(XTrain,YTrain,layers,options);
solverName
- Решатель для обучающей сети'sgdm'
| 'rmsprop'
| 'adam'
Решатель для обучающей сети, заданный как один из следующих:
'sgdm'
- Используйте стохастический градиентный спуск с оптимизатором импульса (SGDM). Можно задать значение импульса с помощью 'Momentum'
аргумент пары "имя-значение".
'rmsprop'
- Используйте оптимизатор RMSProp. Можно задать скорость распада квадратного градиента скользящего среднего значения с помощью 'SquaredGradientDecayFactor'
аргумент пары "имя-значение".
'adam'
- Используйте оптимизатор Адама. Можно задать скорости распада градиента и квадратного градиента скользящих средних значений помощью 'GradientDecayFactor'
и 'SquaredGradientDecayFactor'
Аргументы пары "имя-значение", соответственно.
Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'InitialLearnRate',0.03,'L2Regularization',0.0005,'LearnRateSchedule','piecewise'
задает начальную скорость обучения 0,03 и L2
коэффициент регуляризации 0,0005 и предписывает программному обеспечению сбрасывать скорость обучения каждое заданное количество эпох путем умножения с определенным фактором.'Plots'
- графики для отображения во время сетевого обучения'none'
(по умолчанию) | 'training-progress'
Графики для отображения во время сетевого обучения, заданные как разделенная разделенными запятой парами, состоящая из 'Plots'
и одно из следующих:
'none'
- Не отображать графики во время обучения.
'training-progress'
- Стройте графики процесса обучения. График показывает мини-потери и точность пакетов, потери и точность валидации, а также дополнительную информацию о процессе обучения. График имеет кнопку стопа в правом верхнем углу. Нажмите кнопку, чтобы остановить обучение и вернуть текущее состояние сети. Для получения дополнительной информации о графике процесса обучения смотрите Монитор Глубокого обучения Процесса обучения.
Пример: 'Plots','training-progress'
'Verbose'
- Индикатор для отображения информации о процессе обучения1
(true
) (по умолчанию) | 0
(false
)Индикатор для отображения информации о процессе обучения в командном окне, заданный как разделенная разделенными запятой парами, состоящая из 'Verbose'
и любой из них 1
(true
) или 0
(false
).
Подробный выход отображает следующую информацию:
Классификационные сети
Область | Описание |
---|---|
Epoch | Номер эпохи. Эпоха соответствует полному проходу данных. |
Iteration | Номер итерации. Итерация соответствует мини-пакету. |
Time Elapsed | Время прошло в часах, минутах и секундах. |
Mini-batch Accuracy | Классификационная точность на мини-пакете. |
Validation Accuracy | Классификационная точность данных валидации. Если вы не задаете данные валидации, то функция не отображает это поле. |
Mini-batch Loss | Потеря по мини-пакету. Если выход слой является ClassificationOutputLayer объект, тогда потеря является потерей перекрестной энтропии для задач классификации нескольких классов с взаимоисключающими классами. |
Validation Loss | Потеря данных валидации. Если выход слой является ClassificationOutputLayer объект, тогда потеря является потерей перекрестной энтропии для задач классификации нескольких классов с взаимоисключающими классами. Если вы не задаете данные валидации, то функция не отображает это поле. |
Base Learning Rate | Базовая скорость обучения. Программа умножает коэффициенты скорости обучения слоев на это значение. |
Регрессионные сети
Область | Описание |
---|---|
Epoch | Номер эпохи. Эпоха соответствует полному проходу данных. |
Iteration | Номер итерации. Итерация соответствует мини-пакету. |
Time Elapsed | Время прошло в часах, минутах и секундах. |
Mini-batch RMSE | Root-mean-quared-error (RMSE) на мини-пакете. |
Validation RMSE | RMSE на данных валидации. Если вы не задаете данные валидации, то программное обеспечение не отображает это поле. |
Mini-batch Loss | Потеря по мини-пакету. Если выход слой является RegressionOutputLayer объект, тогда потеря является квадратичной невязкой. |
Validation Loss | Потеря данных валидации. Если выход слой является RegressionOutputLayer объект, тогда потеря является квадратичной невязкой. Если вы не задаете данные валидации, то программное обеспечение не отображает это поле. |
Base Learning Rate | Базовая скорость обучения. Программа умножает коэффициенты скорости обучения слоев на это значение. |
Чтобы задать данные валидации, используйте 'ValidationData'
Пара "имя-значение".
Пример: 'Verbose',false
'VerboseFrequency'
- Частота подробной печатиЧастота подробной печати, которая является количеством итераций между печатью в командное окно, заданная как разделенная разделенными запятой парами, состоящая из 'VerboseFrequency'
и положительное целое число. Эта опция имеет эффект только когда 'Verbose'
значение равно true
.
Если вы проверяете сеть во время обучения, то trainNetwork
также печатается в командном окне каждый раз, когда происходит валидация.
Пример: 'VerboseFrequency',100
'MaxEpochs'
- Максимальное количество эпохМаксимальное количество эпох для обучения, заданное как разделенная разделенными запятой парами, состоящая из 'MaxEpochs'
и положительное целое число.
Итерация является одним из шагов, предпринятых в алгоритме градиентного спуска, к минимизации функции потерь с помощью мини-пакета. Эпоха - это полный проход алгоритма настройки по всему набору обучающих данных.
Пример: 'MaxEpochs',20
'MiniBatchSize'
- Размер мини-партииРазмер мини-пакета, используемого для каждой итерации обучения, задается как разделенная разделенными запятой парами, состоящая из 'MiniBatchSize'
и положительное целое число. Мини-пакет является подмножеством набора обучающих данных, которое используется для вычисления градиента функции потерь и обновления весов. См. Стохастический градиентный спуск.
Пример: 'MiniBatchSize',256
'Shuffle'
- Опция для перестановки данных'once'
(по умолчанию) | 'never'
| 'every-epoch'
Опция для перестановки данных, заданная как разделенная разделенными запятой парами, состоящая из 'Shuffle'
и одно из следующих:
'once'
- Перемещайте данные обучения и валидации один раз перед обучением.
'never'
- Не тасовать данные.
'every-epoch'
- Перемещайте обучающие данные перед каждой эпохой обучения и перетасовывайте валидационные данные перед каждой сетевой валидацией. Если размер мини-пакета не разделяет равномерно количество обучающих выборок, то trainNetwork
отбрасывает обучающие данные, которые не вписываются в окончательный полный мини-пакет каждой эпохи. Чтобы не отбрасывать одни и те же данные каждую эпоху, установите 'Shuffle'
значение в 'every-epoch'
.
Пример: 'Shuffle','every-epoch'
'ValidationData'
- Данные для валидации во время обученияДанные для проверки во время обучения, заданные как datastore, таблица или массив ячеек, содержащий предикторы и ответы валидации.
Можно задать предикторы и ответы валидации, используя те же форматы, поддерживаемые trainNetwork
функция. Можно задать данные валидации как datastore, таблица или массив ячеек {predictors,responses}
, где predictors
содержит предикторы и responses
валидации содержит ответы на валидацию.
Для получения дополнительной информации смотрите images
, sequences
, и features
входные параметры trainNetwork
функция.
Во время обучения, trainNetwork
вычисляет точность валидации и потери валидации данных валидации. Чтобы задать частоту валидации, используйте 'ValidationFrequency'
аргумент пары "имя-значение". Можно также использовать данные валидации, чтобы автоматически остановить обучение, когда потеря валидации прекращает уменьшаться. Чтобы включить автоматическую остановку валидации, используйте 'ValidationPatience'
аргумент пары "имя-значение".
Если ваша сеть имеет слои, которые ведут себя по-другому во время предсказания, чем во время обучения (для примера, слоев отсева), то точность валидации может быть выше точности обучения (мини-пакета).
Данные валидации тасуются в соответствии с 'Shuffle'
значение. Если на 'Shuffle'
значение равно 'every-epoch'
затем данные валидации перетасовываются перед каждой валидацией сети.
'ValidationFrequency'
- Частота валидации сетиЧастота валидации сети в количестве итераций, заданная как разделенная разделенными запятой парами, состоящая из 'ValidationFrequency'
и положительное целое число.
The 'ValidationFrequency'
значение является количеством итераций между оценками метрик валидации. Чтобы задать данные валидации, используйте 'ValidationData'
аргумент пары "имя-значение".
Пример: 'ValidationFrequency',20
'ValidationPatience'
- Терпение остановки валидацииInf
(по умолчанию) | положительное целое числоТерпение валидации остановки сетевого обучения, заданное как разделенная разделенными запятой парами, состоящая из 'ValidationPatience'
и положительное целое или Inf
.
The 'ValidationPatience'
значение является количеством раз, когда потеря на наборе валидации может быть больше или равной ранее наименьшей потере до остановки сетевого обучения. Чтобы включить автоматическую остановку валидации, задайте положительное целое число в качестве 'ValidationPatience'
значение. Если вы используете значение по умолчанию Inf
, затем обучение останавливается после максимального количества эпох. Чтобы задать данные валидации, используйте 'ValidationData'
аргумент пары "имя-значение".
Пример: 'ValidationPatience',5
'InitialLearnRate'
- Начальная скорость обученияНачальная скорость обучения, используемая для обучения, задается как разделенная разделенными запятой парами, состоящая из 'InitialLearnRate'
и положительная скалярная величина. Значение по умолчанию является 0,01 для 'sgdm'
решатель и 0,001 для 'rmsprop'
и 'adam'
решатели. Если скорость обучения слишком низкий, то обучение занимает много времени. Если скорость обучения слишком высок, то обучение может достигнуть неоптимального результата или отличаться.
Пример: 'InitialLearnRate',0.03
Типы данных: single
| double
'LearnRateSchedule'
- Опция для падения скорости обучения во время обучения'none'
(по умолчанию) | 'piecewise'
Опция для падения скорости обучения во время обучения, заданная как разделенная разделенными запятой парами, состоящая из 'LearnRateSchedule'
и одно из следующих:
'none'
- Темп обучения остается постоянным на протяжении всего обучения.
'piecewise'
- Программное обеспечение обновляет скорость обучения каждое определенное количество эпох путем умножения с определенным фактором. Используйте LearnRateDropFactor
аргумент пары "имя-значение" для задания значения этого фактора. Используйте LearnRateDropPeriod
аргумент пары "имя-значение" для определения количества эпох между умножениями.
Пример: 'LearnRateSchedule','piecewise'
'LearnRateDropPeriod'
- Количество эпох для падения скорости обученияКоличество эпох для удаления скорости обучения, заданное как разделенная разделенными запятой парами, состоящая из 'LearnRateDropPeriod'
и положительное целое число. Эта опция действительна только, когда значение LearnRateSchedule
является 'piecewise'
.
Программа умножает глобальную скорость обучения с коэффициентом падения каждый раз, когда заданное количество эпох проходит. Задайте коэффициент падения с помощью LearnRateDropFactor
аргумент пары "имя-значение".
Пример: 'LearnRateDropPeriod',3
'LearnRateDropFactor'
- Коэффициент для падения скорости обученияКоэффициент для падения скорости обучения, заданный как разделенная разделенными запятой парами, состоящая из 'LearnRateDropFactor'
и скаляром от 0 до 1. Эта опция действительна только, когда значение LearnRateSchedule
является 'piecewise'
.
LearnRateDropFactor
является мультипликативным фактором для применения к скорости обучения каждый раз, когда проходит определенное количество эпох. Задайте количество эпох, использующих LearnRateDropPeriod
аргумент пары "имя-значение".
Пример: 'LearnRateDropFactor',0.1
Типы данных: single
| double
'L2Regularization'
- Коэффициент для L2 регуляризацииКоэффициент для регуляризации L2 (распад веса), заданный как разделенная разделенными запятой парами, состоящая из 'L2Regularization'
и неотрицательный скаляр. Для получения дополнительной информации смотрите L2 Регуляризация.
Можно задать множитель для регуляризации L2 для слоев сети с настраиваемыми параметрами. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».
Пример: 'L2Regularization',0.0005
Типы данных: single
| double
'Momentum'
- Вклад предыдущего шагаВклад шага обновления параметров предыдущей итерации в текущую итерацию стохастического градиентного спуска с импульсом, заданный как разделенная разделенными запятой парами, состоящая из 'Momentum'
и скаляром от 0 до 1. Значение 0 означает отсутствие вклада от предыдущего шага, в то время как значение 1 означает максимальный вклад от предыдущего шага.
Чтобы задать 'Momentum'
значение, вы должны задать solverName
чтобы быть 'sgdm'
. Значение по умолчанию хорошо работает для большинства задач. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.
Пример: 'Momentum',0.95
Типы данных: single
| double
'GradientDecayFactor'
- Скорость распада градиентного скользящего среднего значенияСкорость распада градиентного скользящего среднего значения для решателя Адама, заданная как разделенная разделенными запятой парами, состоящая из 'GradientDecayFactor'
и неотрицательный скаляр менее 1. Скорость градиентного распада обозначается β1
в [4].
Чтобы задать 'GradientDecayFactor'
значение, вы должны задать solverName
чтобы быть 'adam'
. Значение по умолчанию хорошо работает для большинства задач. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.
Пример: 'GradientDecayFactor',0.95
Типы данных: single
| double
'SquaredGradientDecayFactor'
- Скорость распада квадратного градиента скользящего среднего значенияСкорость распада квадратного градиента скользящего среднего значения для решателей Adam и RMSProp, заданная как разделенная разделенными запятой парами, состоящая из 'SquaredGradientDecayFactor'
и неотрицательный скаляр менее 1. Квадратная скорость распада градиента обозначается β2
в [4].
Чтобы задать 'SquaredGradientDecayFactor'
значение, вы должны задать solverName
чтобы быть 'adam'
или 'rmsprop'
. Типичные значения скорости распада составляют 0,9, 0,99 и 0,999, что соответствует длинам усреднения 10, 100 и 1000 обновлений параметров, соответственно. Значение по умолчанию является 0.999 для решателя Адама. Значение по умолчанию является 0,9 для решателя RMSProp.
Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.
Пример: 'SquaredGradientDecayFactor',0.99
Типы данных: single
| double
'Epsilon'
- Смещение знаменателяСмещение знаменателя для решателей Adam и RMSProp, заданное как разделенная разделенными запятой парами, состоящая из 'Epsilon'
и положительная скалярная величина. Решатель добавляет смещение знаменателю в обновлениях сетевого параметра, чтобы избежать деления на нуль.
Чтобы задать 'Epsilon'
значение, вы должны задать solverName
чтобы быть 'adam'
или 'rmsprop'
. Значение по умолчанию хорошо работает для большинства задач. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.
Пример: 'Epsilon',1e-6
Типы данных: single
| double
'ResetInputNormalization'
- Опция сброса нормализации входного слояtrue
(по умолчанию) | false
Опция сброса нормализации входного слоя, заданная как одно из следующего:
true
- Сбросьте вход слоя статистики нормализации и пересчитайте их во время обучения.
false
- Вычислите статистику нормализации во время обучения, когда они пусты.
'BatchNormalizationStatistics'
- Режим оценки статистики в слоях нормализации партии .'population'
(по умолчанию) | 'moving'
Режим для оценки статистики в слоях нормализации партии ., заданный как один из следующих:
'population'
- Используйте статистику населения. После обучения программное обеспечение завершает статистику путем повторной передачи обучающих данных и использует полученное среднее значение и отклонение.
'moving'
- Аппроксимация статистики во время обучения с помощью текущей оценки, заданной шагами обновления
где и обозначить обновленные среднее и отклонение, соответственно, и обозначить среднее и отклонение значения распада, соответственно, и обозначает среднее значение и отклонение входа слоя, соответственно, и и обозначить последние значения скользящего среднего значения и отклонений, соответственно. После обучения программное обеспечение использует самое последнее значение скользящего среднего значения и отклонений. Эта опция поддерживает обучение только для центрального процессора и одного графического процессора.
'GradientThreshold'
- Порог градиентаInf
(по умолчанию) | положительная скалярная величинаПорог градиента, заданное как разделенная разделенными запятой парами, состоящая из 'GradientThreshold'
и Inf
или положительная скалярная величина. Если градиент превышает значение GradientThreshold
, затем градиент обрезается согласно GradientThresholdMethod
.
Пример: 'GradientThreshold',6
'GradientThresholdMethod'
- Метод градиентного порога'l2norm'
(по умолчанию) | 'global-l2norm'
| 'absolute-value'
Метод порога градиента, используемый для обрезки значений градиента, которые превышают порог градиента, заданный как разделенная разделенными запятой парами, состоящая из 'GradientThresholdMethod'
и одно из следующих:
'l2norm'
- Если L2 норма градиента настраиваемого параметра больше GradientThreshold
, затем масштабируйте градиент так, чтобы норма L2 равнялась GradientThreshold
.
'global-l2norm'
- Если глобальная норма L2, L, больше GradientThreshold
, затем масштабируйте все градиенты в множитель GradientThreshold/
L. Глобальная норма L2 рассматривает все настраиваемые параметры.
'absolute-value'
- Если абсолютное значение отдельной частной производной в градиенте настраиваемого параметра больше GradientThreshold
, затем масштабируйте частную производную, чтобы величина равнялась GradientThreshold
и сохранить знак частной производной.
Для получения дополнительной информации см. раздел «Обрезка градиента».
Пример: 'GradientThresholdMethod','global-l2norm'
'SequenceLength'
- Опция для заполнения, усечения или разделения входных последовательностей'longest'
(по умолчанию) | 'shortest'
| положительное целое числоОпция для заполнения, усечения или разделения входных последовательностей, заданная как одно из следующего:
'longest'
- Дополните последовательности в каждом мини-пакете, чтобы иметь ту же длину, что и самая длинная последовательность. Эта опция не отбрасывает никаких данных, хотя заполнение может ввести шум в сеть.
'shortest'
- обрезать последовательности в каждом мини-пакете так, чтобы они имели ту же длину, что и самая короткая последовательность. Эта опция гарантирует, что заполнение не будет добавлено, за счет отбрасывания данных.
Положительное целое число - для каждого мини-пакета дополните последовательности ближайшим кратным указанной длине, которая больше самой длинной длины последовательности в мини-пакете, и затем разделите последовательности на меньшие последовательности заданной длины. Если происходит разделение, то программное обеспечение создает дополнительные мини-пакеты. Используйте эту опцию, если полные последовательности не помещаются в памяти. Кроме того, попробуйте уменьшить количество последовательностей на мини-пакет, установив 'MiniBatchSize'
опция для более низкого значения.
Чтобы узнать больше об эффекте заполнения, усечения и разделения входа последовательностей, смотрите Sequence Padding, Truncation и Splitting.
Пример: 'SequenceLength','shortest'
'SequencePaddingDirection'
- Направление заполнения или усечения'right'
(по умолчанию) | 'left'
Направление заполнения или усечения, заданное как одно из следующего:
'right'
- Дополните или обрезайте последовательности справа. Последовательности начинаются с того же временного шага, а программное обеспечение обрезает или добавляет заполнение в конец последовательностей.
'left'
- Дополните или обрезайте последовательности слева. Программа обрезает или добавляет заполнение к началу последовательностей, так что последовательности заканчиваются на одном и том же временном шаге.
Потому что слои LSTM обрабатывают данные последовательности по одному временному шагу за раз, когда слой OutputMode
свойство 'last'
любое заполнение на последних временных шагах может отрицательно повлиять на выход слоя. Чтобы дополнить или обрезать данные последовательности слева, установите 'SequencePaddingDirection'
опция для 'left'
.
Для сетей «последовательность-последовательность» (когда OutputMode
свойство 'sequence'
для каждого слоя LSTM), любое заполнение в первые временные шаги может негативно повлиять на предсказания для более ранних временных шагов. Чтобы дополнить или обрезать данные последовательности справа, установите 'SequencePaddingDirection'
опция для 'right'
.
Чтобы узнать больше об эффекте заполнения, усечения и разделения входа последовательностей, смотрите Sequence Padding, Truncation и Splitting.
'SequencePaddingValue'
- Значение для заполнения входных последовательностейЗначение, которым можно дополнить входные последовательности, заданное как скаляр. Опция действительна только при SequenceLength
является 'longest'
или положительное целое число. Не дополнять последовательности NaN
, потому что это может распространять ошибки по сети.
Пример: 'SequencePaddingValue',-1
'ExecutionEnvironment'
- Аппаратный ресурс для обучения сети'auto'
(по умолчанию) | 'cpu'
| 'gpu'
| 'multi-gpu'
| 'parallel'
Аппаратный ресурс для обучения сети, указанный как одно из следующего:
'auto'
- Используйте графический процессор, если он доступен. В противном случае используйте центральный процессор.
'cpu'
- Использовать центральный процессор.
'gpu'
- Использовать графический процессор.
'multi-gpu'
- Используйте несколько графических процессоров на одной машине, используя локальный параллельный пул на основе профиля кластера по умолчанию. Если текущий параллельный пул отсутствует, программа запускает параллельный пул с размером пула, равным количеству доступных графических процессоров.
'parallel'
- Используйте локальный или удаленный параллельный пул на основе профиля кластера по умолчанию. Если текущий параллельный пул отсутствует, программа запускает его с помощью профиля кластера по умолчанию. Если пул имеет доступ к графическим процессорам, то только работники с уникальным графическим процессором выполняют расчеты обучения. Если пул не имеет графических процессоров, то обучение выполняется для всех доступных рабочих центральных процессоров.
Дополнительные сведения о том, когда использовать различные окружения выполнения, см. в разделе Шкале глубокого обучения параллельно и в облаке.
'gpu'
, 'multi-gpu'
, и 'parallel'
опции требуют Parallel Computing Toolbox™. Для использования графический процессор для глубокого обучения необходимо иметь также поддерживаемое графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Если вы выбираете одну из этих опций и Parallel Computing Toolbox или подходящий графический процессор недоступен, то программное обеспечение возвращает ошибку.
Чтобы увидеть улучшение эффективности при параллельном обучении, попробуйте масштабировать MiniBatchSize
и InitialLearnRate
опции обучения по количеству графических процессоров.
Обучение сетей долгой краткосрочной памяти поддерживает только один центральный процессор или одно обучение графический процессор.
Хранилища данных, используемые для обучения с мультиграфическим процессором или параллельного обучения, должны быть разделяемыми. Для получения дополнительной информации смотрите Использование Datastore для параллельного обучения и фонового диспетчеризации.
Если вы используете 'multi-gpu'
опция с разделяемым входным datastore и 'DispatchInBackground'
затем программа запускает параллельный пул с размером, равным размеру пула по умолчанию. Рабочие с уникальными графическими процессорами выполняют расчеты обучения. Остальные рабочие используются для фоновой отправки.
Пример: 'ExecutionEnvironment','cpu'
'WorkerLoad'
- Параллельное деление рабочей нагрузкиПараллельное деление рабочей нагрузки между графическими процессорами или центральными процессорами, заданное как разделенная разделенными запятой парами, состоящая из 'WorkerLoad'
и одно из следующих:
Скаляр от 0 до 1 - доля работников на каждой машине, используемая для расчетов сетевого обучения. Если вы обучаете сеть с помощью данных в мини-пакетном datastore с включенной диспетчеризацией фона, то остальные работники берут и предварительно обрабатывают данные в фоновом режиме.
Положительное целое число - количество работников на каждой машине, используемое для расчетов сетевого обучения. Если вы обучаете сеть с помощью данных в мини-пакетном datastore с включенной диспетчеризацией фона, то остальные работники берут и предварительно обрабатывают данные в фоновом режиме.
Числовой вектор - сетевая обучающая нагрузка для каждого работника в параллельном пуле. Для вектора W
, рабочий i
получает W(i)/sum(W) дроби
работы (количество примеров на мини-партию). Если вы обучаете сеть с помощью данных в мини-пакетном datastore с включенной диспетчеризацией фона, можно назначить рабочую нагрузку 0, чтобы использовать этот рабочий процесс для выборки данных в фоновом режиме. Указанный вектор должен содержать по одному значению на каждого работника в параллельном пуле.
Если параллельный пул имеет доступ к графическим процессорам, то работники без уникального графического процессора никогда не используются для обучения расчета. По умолчанию для пулов с графическими процессорами используется все работники с уникальным графическим процессором для расчетов обучения, а остальные работники - для отправки в фоновом режиме. Если пул не имеет доступа к графическим процессорам, и для обучения используются центральные процессоры, то по умолчанию для отправки фоновых данных используется по одному рабочему процессу на машину.
'DispatchInBackground'
- Использовать фоновую рассылкуfalse
(по умолчанию) | true
Используйте background dispatch (асинхронная постановка в очередь предварительной выборки), чтобы считать обучающие данные из хранилищ данных, заданные как false
или true
. Для отправки фона требуется Parallel Computing Toolbox.
DispatchInBackground
поддерживается только для хранилищ данных, которые могут быть разделены. Для получения дополнительной информации смотрите Использование Datastore для параллельного обучения и фонового диспетчеризации.
'CheckpointPath'
- Путь для сохранения сетей контрольных точек''
(по умолчанию) | вектор символовПуть для сохранения сетей контрольных точек, заданный как разделенная разделенными запятой парами, состоящая из 'CheckpointPath'
и вектор символов.
Если вы не задаете путь (то есть используете путь по умолчанию ''
), тогда программное обеспечение не сохраняет никаких сетей контрольных точек.
Если вы задаете путь, то trainNetwork
сохраняет сети контрольных точек в этом пути после каждой эпохи и присваивает уникальное имя каждой сети. Затем можно загрузить любую сеть контрольных точек и возобновить обучение из этой сети.
Если папка не существует, необходимо сначала создать ее перед указанием пути для сохранения сетей контрольных точек. Если заданный вами путь не существует, то trainingOptions
возвращает ошибку.
Дополнительные сведения о сохранении сетевых контрольных точек см. в разделах Сохранение сетей контрольных точек и Возобновление обучения.
Пример: 'CheckpointPath','C:\Temp\checkpoint'
Типы данных: char
'OutputFcn'
- Выходные функцииВыходные функции для вызова во время обучения, заданные как разделенная разделенными запятой парами, состоящая из 'OutputFcn'
и указатель на функцию или cell-массив указателей на функцию. trainNetwork
вызывает указанные функции один раз до начала обучения, после каждой итерации и один раз после завершения обучения. trainNetwork
передает структуру, содержащую информацию в следующих полях:
Область | Описание |
---|---|
Epoch | Текущее число эпохи |
Iteration | Текущее число итерации |
TimeSinceStart | Время в секундах с начала обучения |
TrainingLoss | Текущие потери мини-пакета |
ValidationLoss | Потеря данных валидации |
BaseLearnRate | Текущая базовая скорость обучения |
TrainingAccuracy
| Точность на текущем мини-пакете (классификационные сети) |
TrainingRMSE | RMSE на текущем мини-пакете (регрессионые сети) |
ValidationAccuracy | Точность данных валидации (классификационных сетей) |
ValidationRMSE | RMSE на данных валидации (регрессионые сети) |
State | Текущее состояние обучения с возможным значением "start" , "iteration" , или "done" |
Если поле не вычисляется или не релевантно для определенного вызова выходных функций, то это поле содержит пустой массив.
Можно использовать выходные функции для отображения или построения графика информации о прогрессе или для остановки обучения. Чтобы остановить обучение раньше, заставьте вашу выходную функцию вернуться true
. Если какая-либо выходная функция возвращается true
, затем обучение заканчивает и trainNetwork
возвращает последнюю сеть. Пример, показывающий использование выходных функций, см. в разделе Настройка выходе во время обучения по нейронной сети для глубокого обучения.
Типы данных: function_handle
| cell
options
- Опции обученияTrainingOptionsSGDM
| TrainingOptionsRMSProp
| TrainingOptionsADAM
Опции обучения, возвращенные как TrainingOptionsSGDM
, TrainingOptionsRMSProp
, или TrainingOptionsADAM
объект. Чтобы обучить нейронную сеть, используйте опции обучения как входного параметра к trainNetwork
функция.
Если solverName
равен 'sgdm'
, 'rmsprop'
, или 'adam'
, затем опции обучения возвращаются как TrainingOptionsSGDM
, TrainingOptionsRMSProp
, или TrainingOptionsADAM
объект, соответственно.
Можно редактировать свойства опций обучения TrainingOptionsSGDM
, TrainingOptionsADAM
, и TrainingOptionsRMSProp
объекты непосредственно. Например, чтобы изменить размер мини-пакета после использования trainingOptions
функцию, можно отредактировать MiniBatchSize
свойство непосредственно:
options = trainingOptions('sgdm'); options.MiniBatchSize = 64;
Для большинства задач глубокого обучения можно использовать предварительно обученную сеть и адаптировать ее к собственным данным. Для примера, показывающего, как использовать передачу обучения для переобучения сверточной нейронной сети для классификации нового набора изображений, смотрите Train Нейронной сети для глубокого обучения для классификации новых изображений. Также можно создавать и обучать сети с нуля, используя layerGraph
объекты с trainNetwork
и trainingOptions
функций.
Если trainingOptions
функция не предоставляет опций обучения, которые вам нужны для вашей задачи, тогда можно создать пользовательский цикл обучения с помощью автоматической дифференциации. Дополнительные сведения см. в разделе «Определение нейронной сети для глубокого обучения для пользовательских циклов обучения».
Для сверточных и полносвязных слоев инициализация для весов и смещений задается WeightsInitializer
и BiasInitializer
свойства слоев, соответственно. Для примеров, показывающих, как изменить инициализацию для весов и смещений, смотрите, Задайте начальные веса и смещения в сверточном слое и Задайте начальные веса и смещения в полносвязном слое.
Стандартный алгоритм градиентного спуска обновляет параметры сети (веса и смещения), чтобы минимизировать функцию потерь, делая небольшие шаги при каждой итерации в направлении отрицательного градиента потери,
где - число итерации, является скорость обучения, является вектором параметра, и - функция потерь. В стандартном алгоритме градиентного спуска, градиент функции потерь, , оценивается с использованием всего набора обучающих данных, и стандартный алгоритм градиентного спуска использует весь набор данных сразу.
Напротив, при каждой итерации алгоритм стохастического градиентного спуска оценивает градиент и обновляет параметры с помощью подмножества обучающих данных. При каждой итерации используется другое подмножество, называемое мини-пакетом. Полный проход алгоритма настройки по всему набору обучающих данных с помощью мини-пакетов составляет одну эпоху. Стохастический градиентный спуск является стохастическим, потому что обновления параметра, вычисленные с помощью мини-пакета, являются шумной оценкой обновления параметра, которая была бы результатом использования полного набора данных. Размер мини-пакета и максимальное количество эпох можно задать при помощи 'MiniBatchSize'
и 'MaxEpochs'
Аргументы пары "имя-значение", соответственно.
Алгоритм стохастического градиентного спуска может колебаться вдоль пути наискорейшего спуска к оптимуму. Добавление термина импульса к обновлению параметра является одним из способов уменьшить это колебание [2]. Стохастический градиентный спуск с обновлением импульса (SGDM)
где определяет вклад предыдущего шага градиента в текущую итерацию. Вы можете задать это значение с помощью 'Momentum'
аргумент пары "имя-значение". Чтобы обучить нейронную сеть с помощью стохастического градиентного спуска с алгоритмом импульса, задайте solverName
как 'sgdm'
. Чтобы задать начальное значение скорости обучения α, используйте 'InitialLearnRate'
аргумент пары "имя-значение". Можно также задать различные скорости обучения для разных слоев и параметров. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».
Стохастический градиентный спуск с импульсом использует одну скорость обучения для всех параметров. Другие алгоритмы оптимизации стремятся улучшить сетевое обучение с помощью скорости обучения, которые различаются по параметрам и могут автоматически адаптироваться к оптимизируемой функции потерь. RMSProp (среднее корневое квадратное распространение) является одним из таких алгоритмов. Он сохраняет скользящее среднее значение элементарных квадратов градиентов параметра,
β2 - скорость затухания скользящего среднего значения. Общие значения скорости распада 0,9, 0,99 и 0,999. Соответствующие средние длины квадратов градиентов равны 1/(1-β2), то есть 10, 100 и 1000 обновлений параметров, соответственно. Можно задать β2 при помощи 'SquaredGradientDecayFactor'
аргумент пары "имя-значение". Алгоритм RMSProp использует это скользящее среднее значение для нормализации обновлений каждого параметра индивидуально,
где деление выполняется поэлементно. Использование RMSProp эффективно уменьшает скорости обучения параметров с большими градиентами и увеличивает скорости обучения параметров с маленькими градиентами. ɛ является небольшой константой, добавленной, чтобы избежать деления на нули. Можно задать ɛ при помощи 'Epsilon'
аргумент пары "имя-значение", но значение по умолчанию обычно работает хорошо. Чтобы использовать RMSProp для обучения нейронной сети, задайте solverName
как 'rmsprop'
.
Адам (выведенный из оценки адаптивного момента) [4] использует обновление параметра, которое подобно RMSProp, но с добавленным термином импульса. Он сохраняет поэлементное скользящее среднее значение как градиентов параметров, так и их квадратов значений,
Можно задать β1 и β2 скорости распада с помощью 'GradientDecayFactor'
и 'SquaredGradientDecayFactor'
Аргументы пары "имя-значение", соответственно. Адам использует скользящие средние значения для обновления сетевых параметров как
Если градиенты во многих итерациях аналогичны, то использование скользящего среднего значения градиента позволяет параметру обновить импульс в определенном направлении. Если градиенты содержат в основном шум, то скользящее среднее значение градиента становится меньше, и поэтому обновления параметра тоже становятся меньше. Можно задать ɛ при помощи 'Epsilon'
аргумент пары "имя-значение". Значение по умолчанию обычно работает хорошо, но для определенных задач значение, равное 1, работает лучше. Чтобы использовать Adam для обучения нейронной сети, задайте solverName
как 'adam'
. Полное обновление Адама также включает механизм исправления смещения, которое появляется в начале обучения. Для получения дополнительной информации см. раздел [4].
Задайте α скорости обучения для всех алгоритмов оптимизации, используя 'InitialLearnRate'
аргумент пары "имя-значение". Эффект скорости обучения отличается для различных алгоритмов оптимизации, поэтому оптимальные скорости обучения также различаются в целом. Можно также задать скорости обучения, которые различаются слоями и параметром. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».
Если градиенты увеличения в величину экспоненциально, то обучение нестабильно и может различаться в течение нескольких итераций. На этот «взрыв градиента» указывает потеря обучения, которая идет на NaN
или Inf
. Градиентное усечение помогает предотвратить градиентный взрыв, стабилизируя обучение при более высоких скоростях обучения и при наличии выбросов [3]. Градиентное усечение позволяет обучать сети быстрее и обычно не влияет на точность выученной задачи.
Существует два типа градиентных усечений.
Нормированное усечение градиента повторяет градиент на основе порога и не изменяет направление градиента. The 'l2norm'
и 'global-l2norm'
значения GradientThresholdMethod
являются нормальными методами усечения градиента.
Основанный на значении градиент обрезает любую частную производную, большую порога, что может привести к произвольному изменению направления градиента. Основанные на ценности градиентные усечения могут иметь непредсказуемое поведение, но достаточно маленькие изменения не заставляют сеть различаться. The 'absolute-value'
значение GradientThresholdMethod
является основанным на значении методом усечения градиента.
Для примеров смотрите Прогнозирование временных рядов с использованием глубокого обучения и классификацию последовательность-последовательность с использованием глубокого обучения.
Добавление термина регуляризации для весов к функции потерь является одним из способов уменьшить сверхподбор кривой [1], [2]. Термин регуляризации также называется распадом веса. Функция потерь с термином регуляризации принимает форму
где - вектор веса, - коэффициент регуляризации (коэффициент) и функция регуляризации является
Обратите внимание, что смещения не регулируются [2]. Можно задать коэффициент регуляризации при помощи 'L2Regularization'
аргумент пары "имя-значение". Можно также задать различные коэффициенты регуляризации для различных слоев и параметров. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».
Функция потерь, которую программное обеспечение использует для сетевого обучения, включает термин регуляризации. Однако значение потерь, отображаемое в командном окне и графике процесса обучения во время обучения, является потерей только данных и не включает термин регуляризации.
'ValidationPatience'
опция обучения по умолчанию Inf
Поведение изменено в R2018b
Начиная с R2018b, значение по умолчанию 'ValidationPatience'
опция обучения Inf
, что означает, что автоматическая остановка через валидацию отключена. Это поведение препятствует остановке обучения перед достаточным обучением на основе данных.
В предыдущих версиях значение по умолчанию является 5
. Чтобы воспроизвести это поведение, установите 'ValidationPatience'
опция для 5
.
Поведение изменено в R2018b
Начиная с R2018b, при сохранении сетей контрольных точек программное обеспечение присваивает имена файлов, начиная с net_checkpoint_
. В предыдущих версиях программа присваивает имена файлов, начиная с convnet_checkpoint_
.
Если у вас есть код, который сохраняет и загружает сети контрольных точек, обновите код, чтобы загрузить файлы с новым именем.
[1] Bishop, C. M. Pattern Recognition and Машинное Обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.
[2] Мерфи, К. П. Машинное обучение: вероятностная перспектива. The MIT Press, Кембридж, Массачусетс, 2012.
[3] Паскану, Р., Т. Миколов, и Я. Бенгио. «О сложности настройки рекуррентных нейронных сетей». Материалы 30-й Международной конференции по машинному обучению. Том 28 (3), 2013, стр. 1310-1318.
[4] Кингма, Дидерик и Джимми Ба. «Adam: A method for stochastic optimization». arXiv preprint arXiv:1412.6980 (2014).
analyzeNetwork
| Deep Network Designer | trainNetwork
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.