Варианты обучения нейронной сети глубокого обучения
возвращает параметры обучения для оптимизатора, указанного 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) вместо точности.
На рисунке отмечается каждая учебная эпоха с помощью затененного фона. Эпоха - это полный проход через весь набор данных.
Во время обучения можно остановить обучение и вернуть текущее состояние сети, нажав кнопку остановки в правом верхнем углу. Например, вы можете прекратить обучение, когда точность сети достигает плато, и ясно, что точность больше не улучшается. После нажатия кнопки остановки обучение может пройти некоторое время. После завершения обучения trainNetwork возвращает обученную сеть.
После завершения обучения просмотрите результаты, показывающие окончательную точность проверки и причину завершения обучения. Окончательные метрики проверки помечены на графиках как Конечные (Final). Если сеть содержит уровни пакетной нормализации, окончательные метрики проверки могут отличаться от метрик проверки, оцененных во время обучения. Это объясняется тем, что статистика средних значений и отклонений, используемая для нормализации партий, может отличаться после завершения обучения. Например, если 'BatchNormalizationStatisics' вариант обучения - 'population'затем после обучения программное обеспечение завершает статистику пакетной нормализации путем повторного прохождения обучающих данных и использует полученное среднее значение и дисперсию. Если 'BatchNormalizationStatisics' вариант обучения - 'moving'затем программное обеспечение аппроксимирует статистику во время обучения с использованием текущей оценки и использует последние значения статистики.
Справа просмотрите информацию о времени и настройках обучения. Дополнительные сведения о параметрах обучения см. в разделах Настройка параметров и конволюционная нейронная сеть поезда.

График хода обучения во время обучения
Обучение сети и составление графика хода обучения во время обучения.
Загрузите обучающие данные, содержащие 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'- Используйте оптимизатор Adam. Можно задать скорости затухания скользящих средних градиента и квадрата градиента, используя 'GradientDecayFactor' и 'SquaredGradientDecayFactor' аргументы пары имя-значение соответственно.
Дополнительные сведения о различных решателях см. в разделе Стохастический градиентный спуск.
Укажите дополнительные пары, разделенные запятыми 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 | Корневая среднеквадратичная ошибка (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' - Данные для проверки во время обученияДанные для проверки во время обучения, указанные как хранилище данных, таблица или массив ячеек, содержащий предикторы проверки и ответы.
Можно указать предикторы проверки и ответы, используя те же форматы, которые поддерживаются trainNetwork функция. Можно указать данные проверки как хранилище данных, таблицу или массив ячеек. {predictors,responses}, где predictors содержит предикторы проверки и responses содержит ответы проверки.
Дополнительные сведения см. в разделе images, sequences, и features входные аргументы trainNetwork функция.
Во время обучения, trainNetwork вычисляет точность проверки и потери проверки на данных проверки. Чтобы указать частоту проверки, используйте 'ValidationFrequency' аргумент пары имя-значение. Можно также использовать данные проверки для автоматического прекращения обучения, когда потеря проверки перестает уменьшаться. Чтобы включить автоматическую остановку проверки, используйте 'ValidationPatience' аргумент пары имя-значение.
Если ваша сеть имеет уровни, которые ведут себя иначе во время прогнозирования, чем во время обучения (например, уровни отсева), то точность проверки может быть выше, чем точность обучения (мини-пакет).
Данные проверки тасуются в соответствии с 'Shuffle' значение. Если 'Shuffle' значение равно 'every-epoch'затем данные проверки тасуются перед каждой сетевой проверкой.
'ValidationFrequency' - Периодичность проверки сетиЧастота проверки сети в количестве итераций, указанная как разделенная запятыми пара, состоящая из 'ValidationFrequency' и положительное целое число.
'ValidationFrequency' значение - количество итераций между оценками метрик проверки. Чтобы указать данные проверки, используйте 'ValidationData' аргумент пары имя-значение.
Пример: 'ValidationFrequency',20
'ValidationPatience' - Терпение остановки валидацииInf (по умолчанию) | положительное целое числоТерпение подтверждения остановки сетевого обучения, определяемого как пара, разделенная запятыми, состоящая из 'ValidationPatience' и положительное целое число или Inf.
'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'. Значение по умолчанию подходит для большинства проблем. Дополнительные сведения о различных решателях см. в разделе Стохастический градиентный спуск.
Пример: 'Momentum',0.95
Типы данных: single | double
'GradientDecayFactor' - Скорость спада градиентного скользящего среднегоСкорость затухания скользящего среднего градиента для решателя Адама, заданная как разделенная запятыми пара, состоящая из 'GradientDecayFactor' и неотрицательный скаляр меньше 1. Скорость градиентного распада обозначается как β1 в [4].
Чтобы указать 'GradientDecayFactor' значение, необходимо установить solverName быть 'adam'. Значение по умолчанию подходит для большинства проблем. Дополнительные сведения о различных решателях см. в разделе Стохастический градиентный спуск.
Пример: 'GradientDecayFactor',0.95
Типы данных: single | double
'SquaredGradientDecayFactor' - Скорость спада квадрата градиента скользящего среднегоСкорость распада квадратичного градиентного скользящего среднего для решателей Адама и RMSProp, определяемая как пара, разделенная запятыми, состоящая из 'SquaredGradientDecayFactor' и неотрицательный скаляр меньше 1. Скорость распада градиента в квадрате обозначается как β2 в [4].
Чтобы указать 'SquaredGradientDecayFactor' значение, необходимо установить solverName быть 'adam' или 'rmsprop'. Типичные значения скорости затухания составляют 0,9, 0,99 и 0,999, что соответствует усредненным длинам 10, 100 и 1000 обновлений параметров соответственно. Значение по умолчанию для решателя Адама равно 0,999. Значение по умолчанию для решателя RMSProp равно 0,9.
Дополнительные сведения о различных решателях см. в разделе Стохастический градиентный спуск.
Пример: 'SquaredGradientDecayFactor',0.99
Типы данных: single | double
'Epsilon' - Смещение знаменателяСмещение знаменателя для решателей Adam и RMSProp, указанное как разделенная запятыми пара, состоящая из 'Epsilon' и положительный скаляр. Решатель добавляет смещение к знаменателю в обновлениях параметров сети, чтобы избежать деления на ноль.
Чтобы указать 'Epsilon' значение, необходимо установить solverName быть 'adam' или 'rmsprop'. Значение по умолчанию подходит для большинства проблем. Дополнительные сведения о различных решателях см. в разделе Стохастический градиентный спуск.
Пример: 'Epsilon',1e-6
Типы данных: single | double
'ResetInputNormalization' - Возможность сброса нормализации входного уровняtrue (по умолчанию) | falseОпция сброса нормализации входного уровня, заданная как одно из следующих значений:
true - Сбросьте статистику нормализации входного уровня и пересчитайте ее во время обучения.
false - Расчет статистики нормализации во время обучения, когда она пуста.
'BatchNormalizationStatistics' - Режим для оценки статистики в слоях пакетной нормализации'population' (по умолчанию) | 'moving'Режим для оценки статистики в слоях пакетной нормализации, указанный как один из следующих:
'population' - Использовать демографическую статистику. После обучения программное обеспечение завершает статистику путем повторного прохождения данных обучения и использует полученное среднее значение и дисперсию.
'moving' - аппроксимировать статистику во время обучения, используя текущую оценку, заданную шагами обновления;
где * и * обозначают обновленное среднее значение и дисперсию, соответственноλ (и) λ (2) обозначают среднее значение и значения спада дисперсии, соответственноλ (и 2) обозначают среднее значение и дисперсию входного слоя, соответственно, и λ (и 2) обозначают последние значения скользящего среднего значения и значения дисперсии, соответственно. После обучения программное обеспечение использует самое последнее значение статистики скользящего среднего и дисперсии. Этот параметр поддерживает только обучение ЦП и одного графического процессора.
'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' для более низкого значения.
Дополнительные сведения об эффекте заполнения, усечения и разделения входных последовательностей см. в разделах Заполнение последовательности, усечение и разделение.
Пример: 'SequenceLength','shortest'
'SequencePaddingDirection' - Направление заполнения или усечения'right' (по умолчанию) | 'left'Направление заполнения или усечения, указанное как одно из следующих:
'right' - Последовательность подушек или усечений справа. Последовательности начинаются на одном и том же этапе, и программное обеспечение усекает или добавляет дополнение к концу последовательностей.
'left' - Последовательность подушек или усечений слева. Программное обеспечение усекает или добавляет дополнение к началу последовательностей, так что последовательности заканчиваются на одном и том же шаге времени.
Поскольку уровни LSTM обрабатывают данные последовательности один раз за раз, когда уровень OutputMode свойство - 'last'любое заполнение на последних временных этапах может отрицательно влиять на выход слоя. Для размещения или усечения данных последовательности слева установите 'SequencePaddingDirection' опция для 'left'.
Для сетей «последовательность-последовательность» (когда OutputMode свойство - 'sequence' для каждого уровня LSTM), любое заполнение в первых временных шагах может негативно влиять на прогнозы для более ранних временных шагов. Для добавления или усечения данных последовательности справа установите 'SequencePaddingDirection' опция для 'right'.
Дополнительные сведения об эффекте заполнения, усечения и разделения входных последовательностей см. в разделах Заполнение последовательности, усечение и разделение.
'SequencePaddingValue' - Значения для входных последовательностей площадкиЗначение, с помощью которого подаются входные последовательности, заданные как скаляр. Параметр допустим только в том случае, если SequenceLength является 'longest' или положительное целое число. Не устанавливать последовательности с NaN, поскольку это может распространять ошибки по всей сети.
Пример: 'SequencePaddingValue',-1
'ExecutionEnvironment' - Аппаратные ресурсы для сети обучения'auto' (по умолчанию) | 'cpu' | 'gpu' | 'multi-gpu' | 'parallel'Аппаратный ресурс для обучающей сети, указанный как один из следующих:
'auto' - Используйте графический процессор, если он доступен. В противном случае используйте ЦП.
'cpu' - Использовать ЦП.
'gpu' - Использовать графический процессор.
'multi-gpu' - Использование нескольких графических процессоров на одном компьютере с использованием локального параллельного пула на основе профиля кластера по умолчанию. Если текущий параллельный пул отсутствует, программа запускает параллельный пул с размером пула, равным количеству доступных графических процессоров.
'parallel' - Использовать локальный или удаленный параллельный пул на основе профиля кластера по умолчанию. Если текущий параллельный пул отсутствует, программа запускает его с использованием профиля кластера по умолчанию. Если пул имеет доступ к графическим процессорам, то только работники с уникальным графическим процессором выполняют вычисления обучения. Если в пуле нет графических процессоров, обучение проводится на всех доступных рабочих ЦП.
Дополнительные сведения о том, когда использовать различные среды выполнения, см. в разделе Масштабирование глубокого обучения параллельно и в облаке.
'gpu', 'multi-gpu', и 'parallel' параметры требуют Toolbox™ параллельных вычислений. Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Если выбрана одна из этих опций, и панель параллельных вычислений или подходящий графический процессор недоступны, программа возвращает ошибку.
Чтобы увидеть улучшение производительности при параллельном обучении, попробуйте увеличить MiniBatchSize и InitialLearnRate варианты обучения по количеству графических процессоров.
Обучающие сети долговременной памяти поддерживают только один процессор или один графический процессор.
Хранилища данных, используемые для обучения с использованием нескольких графических процессоров или параллельного обучения, должны быть разделяемыми. Дополнительные сведения см. в разделе Использование хранилища данных для параллельного обучения и фонового диспетчеризации.
Если вы используете 'multi-gpu' с разделяемым хранилищем входных данных и 'DispatchInBackground' затем программа запускает параллельный пул с размером, равным размеру пула по умолчанию. Работники с уникальными графическими процессорами выполняют вычисления обучения. Остальные работники используются для фоновой отправки.
Пример: 'ExecutionEnvironment','cpu'
'WorkerLoad' - Параллельное разделение рабочей нагрузкиРазделение параллельной рабочей нагрузки между графическими процессорами или ЦП, указанное как разделенная запятыми пара, состоящая из 'WorkerLoad' и одно из следующих:
Скаляр от 0 до 1 - доля работников на каждой машине для использования в вычислениях сетевого обучения. При обучении сети с использованием данных в мини-хранилище пакетных данных с включенной фоновой отправкой оставшиеся работники извлекают и обрабатывают данные в фоновом режиме.
Положительное целое число - количество работников на каждой машине для использования в вычислениях сетевого обучения. При обучении сети с использованием данных в мини-хранилище пакетных данных с включенной фоновой отправкой оставшиеся работники извлекают и обрабатывают данные в фоновом режиме.
Числовой вектор - сетевая учебная нагрузка для каждого работника в параллельном пуле. Для вектора W, работник i получает дробь W(i)/sum(W) работы (количество примеров на мини-партию). При обучении сети с использованием данных в мини-хранилище пакетных данных с включенной фоновой отправкой можно назначить загрузку работника 0 для использования этого работника для выборки данных в фоновом режиме. Указанный вектор должен содержать одно значение на работника в параллельном пуле.
Если параллельный пул имеет доступ к графическим процессорам, то работники без уникального графического процессора никогда не используются для вычисления обучения. По умолчанию пулы с графическими процессорами используют всех работников с уникальным графическим процессором для учебных вычислений, а оставшиеся работники - для фоновой отправки. Если пул не имеет доступа к графическим процессорам, а ЦП используются для обучения, то по умолчанию для отправки фоновых данных используется один работник на машину.
'DispatchInBackground' - Использовать фоновую отправкуfalse (по умолчанию) | trueИспользовать фоновую диспетчеризацию (асинхронную очередь предварительной выборки) для считывания обучающих данных из хранилищ данных, указанных как false или true. Для фоновой отправки требуется панель инструментов параллельных вычислений.
DispatchInBackground поддерживается только для хранилищ данных, которые являются секционируемыми. Дополнительные сведения см. в разделе Использование хранилища данных для параллельного обучения и фонового диспетчеризации.
'CheckpointPath' - Путь для сохранения сетей контрольных точек'' (по умолчанию) | символьный векторПуть для сохранения сетей контрольных точек, указанный как разделенная запятыми пара, состоящая из 'CheckpointPath' и вектор символов.
Если путь не указан (то есть используется значение по умолчанию ''), то программное обеспечение не сохраняет сети контрольных точек.
Если указан путь, то trainNetwork сохраняет сети контрольных точек на этом пути после каждой эпохи и присваивает каждой сети уникальное имя. Затем можно загрузить любую сеть контрольных точек и возобновить обучение из этой сети.
Если папка не существует, необходимо сначала создать ее, прежде чем указывать путь для сохранения сетей контрольных точек. Если указанный путь не существует, то trainingOptions возвращает ошибку.
Дополнительные сведения о сохранении сетевых контрольных точек см. в разделах Сохранение сетей контрольных точек и Возобновление обучения.
Пример: 'CheckpointPath','C:\Temp\checkpoint'
Типы данных: char
'OutputFcn' - Функции выводаФункции вывода для вызова во время обучения, определяемые как разделенная запятыми пара, состоящая из 'OutputFcn' и дескриптор функции или массив ячеек дескрипторов функции. 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;Для выполнения большинства задач глубокого обучения можно использовать предварительно подготовленную сеть и адаптировать ее к собственным данным. Пример, показывающий, как использовать transfer learning для переподготовки сверточной нейронной сети для классификации нового набора изображений, см. в разделе Train Deep Learning Network to Classify New Images. Кроме того, можно создавать и обучать сети с нуля с помощью layerGraph объекты с trainNetwork и trainingOptions функции.
Если trainingOptions функция не предоставляет возможности обучения, необходимые для выполнения задачи, после чего можно создать индивидуальный цикл обучения с помощью автоматического дифференцирования. Дополнительные сведения см. в разделе Определение сети глубокого обучения для пользовательских циклов обучения.
Для сверточных и полностью соединенных слоев инициализация для весов и смещений задается WeightsInitializer и BiasInitializer свойства слоев соответственно. Примеры изменения инициализации весов и смещений см. в разделах Задание начальных весов и смещений в сверточном слое и Указание начальных весов и смещений в полностью связанном слое.
Стандартный алгоритм градиентного спуска обновляет параметры сети (веса и смещения), чтобы минимизировать функцию потерь, предпринимая небольшие шаги на каждой итерации в направлении отрицательного градиента потерь,
где ℓis числа итераций, 0 - скорость обучения, λ - вектор параметров, (start) - функция потерь. В стандартном алгоритме градиентного спуска градиент потерь,
Напротив, при каждой итерации алгоритм стохастического градиентного спуска оценивает градиент и обновляет параметры, используя подмножество обучающих данных. В каждой итерации используется другое подмножество, называемое мини-пакетом. Полный проход обучающего алгоритма по всему обучающему набору с использованием мини-партий составляет одну эпоху. Стохастический градиентный спуск является стохастическим, так как обновления параметров, вычисленные с использованием мини-пакета, являются шумной оценкой обновления параметров, которое может возникнуть в результате использования полного набора данных. Можно указать размер мини-партии и максимальное количество периодов с помощью 'MiniBatchSize' и 'MaxEpochs' аргументы пары имя-значение соответственно.
Алгоритм стохастического градиентного спуска может колебаться по пути наиболее крутого спуска к оптимуму. Добавление элемента импульса к обновлению параметра является одним из способов уменьшения этого колебания [2]. Стохастический градиентный спуск с обновлением импульса (SGDM)
где определяет вклад предыдущего шага градиента в текущую итерацию. Вы можете указать это значение с помощью 'Momentum' аргумент пары имя-значение. Для обучения нейронной сети по стохастическому градиентному спуску с алгоритмом импульса указать solverName как 'sgdm'. Чтобы задать начальное значение коэффициента обучения α, используйте 'InitialLearnRate' аргумент пары имя-значение. Для различных слоев и параметров можно также указать различные скорости обучения. Дополнительные сведения см. в разделе Настройка параметров в сверточных и полностью соединенных слоях.
Стохастический градиентный спуск с импульсом использует единую скорость обучения для всех параметров. Другие алгоритмы оптимизации стремятся улучшить сетевое обучение, используя показатели обучения, которые отличаются по параметрам и могут автоматически адаптироваться к оптимизированной функции потерь. Одним из таких алгоритмов является RMSProp (среднеквадратичное распространение). Оно сохраняет скользящее среднее значений квадратов по элементам градиентов параметров.
θℓ)] 2
β2 - скорость затухания скользящего среднего. Общие значения скорости распада составляют 0,9, 0,99 и 0,999. Соответствующие усредняющие длины квадратичных градиентов равны 1/( 1-β2), то есть 10, 100 и 1000 параметров обновляются соответственно. Можно указать β2 с помощью 'SquaredGradientDecayFactor' аргумент пары имя-значение. Алгоритм RMSProp использует это скользящее среднее для нормализации обновлений каждого параметра по отдельности.
где деление выполняется по элементам. Использование RMSProp эффективно снижает скорость обучения параметров с большими градиентами и увеличивает скорость обучения параметров с малыми градиентами. ɛ малая константа, добавляемая во избежание деления на ноль. Можно указать ɛ с помощью 'Epsilon' аргумент пары имя-значение, но значение по умолчанию обычно работает хорошо. Для использования RMSProp для обучения нейронной сети укажите solverName как 'rmsprop'.
Адам (полученный из адаптивной оценки момента) [4] использует обновление параметров, которое аналогично RMSProp, но с добавленным членом импульса. Он сохраняет скользящее среднее по элементам как градиентов параметров, так и их значений в квадрате.
(θℓ)
θℓ)] 2
Вы можете указать β1 и β2 скорости распада, используя 'GradientDecayFactor' и 'SquaredGradientDecayFactor' аргументы пары имя-значение соответственно. Адам использует скользящие средние для обновления параметров сети как
Если градиенты во многих итерациях схожи, то использование скользящего среднего градиента позволяет обновлениям параметров захватывать импульс в определенном направлении. Если градиенты содержат в основном шум, то скользящее среднее градиента становится меньше, и поэтому обновления параметров также становятся меньше. Можно указать ɛ с помощью 'Epsilon' аргумент пары имя-значение. Значение по умолчанию обычно работает хорошо, но для некоторых проблем значение, равное 1, работает лучше. Чтобы использовать Adam для обучения нейронной сети, укажите solverName как 'adam'. Полное обновление Adam также включает в себя механизм для исправления смещения появляется в начале обучения. Для получения дополнительной информации см. [4].
Укажите скорость обучения α для всех алгоритмов оптимизации с помощью'InitialLearnRate' аргумент пары имя-значение. Влияние скорости обучения различно для различных алгоритмов оптимизации, поэтому оптимальные скорости обучения также различны в целом. Можно также указать показатели обучения, которые различаются по слоям и параметрам. Дополнительные сведения см. в разделе Настройка параметров в сверточных и полностью соединенных слоях.
Если градиенты увеличиваются в геометрической прогрессии, то тренировка нестабильна и может расходиться в течение нескольких итераций. На этот «градиентный взрыв» указывает учебная потеря, которая переходит к NaN или Inf. Отсечение градиента помогает предотвратить взрыв градиента, стабилизируя обучение на более высоких уровнях обучения и при наличии отклонений [3]. Отсечение градиента позволяет быстрее обучать сети и обычно не влияет на точность усвоенной задачи.
Существует два типа отсечения градиента.
Отсечение градиента на основе нормы изменяет масштаб градиента на основе порогового значения и не изменяет направление градиента. 'l2norm' и 'global-l2norm' значения GradientThresholdMethod - основанные на норме методы отсечения градиента.
Градиентная отсечка на основе значений отсекает любую частную производную, превышающую пороговое значение, что может привести к произвольному изменению направления градиента. Отсечение градиента на основе значений может иметь непредсказуемое поведение, но достаточно небольшие изменения не приводят к отклонению сети. 'absolute-value' значение GradientThresholdMethod - метод отсечения градиента на основе значений.
Примеры см. в разделах Прогнозирование временных рядов с использованием глубокого обучения и Классификация последовательности к последовательности с использованием глубокого обучения.
Добавление члена регуляризации для весов к функции ) является одним из способов уменьшения переоборудования [1], [2]. Термин регуляризации также называется распадом веса. Функция потерь с термином регуляризации принимает вид
w),
где - весовой вектор, - коэффициент регуляризации (коэффициент), а функция регуляризации ) -
12wTw.
Обратите внимание, что отклонения не упорядочены [2]. Вы можете указать коэффициент регуляризации , используя 'L2Regularization' аргумент пары имя-значение. Можно также задать различные коэффициенты регуляризации для различных слоев и параметров. Дополнительные сведения см. в разделе Настройка параметров в сверточных и полностью соединенных слоях.
Функция потери, используемая программным обеспечением для обучения сети, включает термин регуляризации. Однако значение потерь, отображаемое в командном окне и графике хода обучения во время обучения, является потерей только в данных и не включает термин регуляризации.
'ValidationPatience' параметр обучения по умолчанию: InfВ R2018b изменилось поведение
Начиная с R2018b, значение по умолчанию 'ValidationPatience' вариант обучения - Inf, что означает, что автоматическая остановка через проверку отключена. Такое поведение предотвращает остановку обучения перед достаточным обучением на основе данных.
В предыдущих версиях значением по умолчанию является 5. Чтобы воспроизвести это поведение, установите 'ValidationPatience' опция для 5.
В R2018b изменилось поведение
Начиная с R2018b, при сохранении сетей контрольных точек программа присваивает имена файлов, начиная с net_checkpoint_. В предыдущих версиях программа присваивает имена файлов, начиная с convnet_checkpoint_.
Если имеется код, сохраняющий и загружающий сети контрольных точек, обновите код для загрузки файлов с новым именем.
[1] Бишоп, К. М. Распознавание образов и машинное обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.
[2] Мерфи, К. П. Машинное обучение: вероятностная перспектива. MIT Press, Кембридж, Массачусетс, 2012.
[3] Паскану, Р., Т. Миколов и Я. Бенгио. «О сложности обучения рецидивирующих нейронных сетей». Материалы 30-й Международной конференции по машинному обучению. Том 28 (3), 2013, стр. 1310-1318.
[4] Кингма, Дьедерик и Джимми Ба. «Адам: метод стохастической оптимизации». arXiv препринт arXiv:1412.6980 (2014).
analyzeNetwork | Конструктор глубоких сетей | trainNetwork
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.