Опции для обучения глубокой нейронной сети
возвращает опции обучения для оптимизатора, заданного 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'
, затем программное обеспечение аппроксимирует статистику во время обучения с помощью рабочей оценки и использует последние значения статистики.
Справа, просмотрите информацию в учебное время и настройки. Чтобы узнать больше об опциях обучения, смотрите Настроенные Параметры и Обучите Сверточную нейронную сеть.
Постройте процесс обучения во время обучения
Обучите сеть и постройте процесс обучения во время обучения.
Загрузите обучающие данные, который содержит 5 000 изображений цифр. Отложите 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'
аргументы пары "имя-значение", соответственно.
Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'InitialLearnRate',0.03,'L2Regularization',0.0005,'LearnRateSchedule','piecewise'
задает начальную скорость обучения как 0,03 и theL2
фактор регуляризации как 0,0005, и дает программному обеспечению команду пропускать скорость обучения каждый данный номер эпох путем умножения с определенным фактором.'Plots'
— Графики отобразиться во время сетевого обучения'none'
(значение по умолчанию) | 'training-progress'
Графики отобразиться во время сетевого обучения в виде разделенной запятой пары, состоящей из 'Plots'
и одно из следующего:
'none'
— Не отображайте графики во время обучения.
'training-progress'
— Постройте процесс обучения. График показывает мини-пакетную потерю и точность, потерю валидации и точность и дополнительную информацию о процессе обучения. График имеет кнопку остановки в верхнем правом углу. Нажмите кнопку, чтобы остановить обучение и возвратить текущее состояние сети. Для получения дополнительной информации о графике процесса обучения смотрите Процесс обучения Глубокого обучения Монитора.
Пример: 'Plots','training-progress'
'Verbose'
— Индикатор, чтобы отобразить информацию о процессе обучения
TRUE
) (значение по умолчанию) | 0
ложь
)Индикатор, чтобы отобразить информацию о процессе обучения в командном окне в виде разделенной запятой пары, состоящей из 'Verbose'
и любой 1
TRUE
) или 0
ложь
).
Многословный выход отображает следующую информацию:
Сети классификации
Поле | Описание |
---|---|
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'
— Данные, чтобы использовать для валидации во время обученияДанные, чтобы использовать для валидации во время обучения в виде datastore, таблицы или массива ячеек, содержащего предикторы валидации и ответы.
Можно задать предикторы валидации и ответы с помощью тех же форматов, поддержанных trainNetwork
функция. Можно задать данные о валидации как datastore, таблицу или массив ячеек {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, и 1 000 обновлений параметра, соответственно. Значение по умолчанию 0.999 для решателя Адама. Значение по умолчанию 0.9 для решателя RMSProp.
Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.
Пример: 'SquaredGradientDecayFactor',0.99
Типы данных: single
| double
'Epsilon'
— Знаменатель возмещенСмещение знаменателя для Адама и решателей RMSProp в виде разделенной запятой пары, состоящей из 'Epsilon'
и положительная скалярная величина. Решатель добавляет смещение к знаменателю в сетевых обновлениях параметра, чтобы избежать деления на нуль.
Задавать 'Epsilon'
значение, необходимо установить solverName
быть 'adam'
или 'rmsprop'
. Значение по умолчанию работает хорошо на большинство проблем. Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.
Пример: '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'
опция к нижнему значению.
Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.
Пример: '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'
опции требуют Parallel Computing Toolbox™. Чтобы использовать графический процессор для глубокого обучения, у вас должно также быть поддерживаемое устройство графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Если вы выбираете одну из этих опций и Parallel Computing Toolbox, или подходящий графический процессор не доступен, то программное обеспечение возвращает ошибку.
Чтобы видеть улучшение эффективности когда обучение параллельно, попытайтесь увеличить MiniBatchSize
и InitialLearnRate
опции обучения количеством графических процессоров.
Учебные длинные краткосрочные сети памяти поддерживают один центральный процессор или одно обучение графического процессора только.
Хранилища данных, используемые для мультиграфического процессора учебное или параллельное обучение, должны быть partitionable. Для получения дополнительной информации смотрите Datastore Использования для Параллельной Диспетчеризации Обучения и Фона.
Если вы используете 'multi-gpu'
опция с partitionable входным datastore и 'DispatchInBackground'
опция, затем программное обеспечение начинает параллельный пул с размера, равного размеру пула по умолчанию. Рабочие с помощью уникальных графических процессоров выполняют учебный расчет. Остающиеся рабочие используются для фоновой отправки.
Пример: 'ExecutionEnvironment','cpu'
'WorkerLoad'
— Найдите что-либо подобное делению загрузки рабочегоНайдите что-либо подобное делению загрузки рабочего между графическими процессорами или центральными процессорами в виде разделенной запятой пары, состоящей из 'WorkerLoad'
и одно из следующего:
Скаляр от 0 до 1 — Часть рабочих на каждой машине, чтобы использовать для сетевого учебного расчета. Если вы обучаете сеть с помощью данных в мини-пакетном datastore с фоновой включенной отправкой, то остающиеся рабочие выбирают и предварительно обрабатывают данные в фоновом режиме.
Положительное целое число — Количество рабочих на каждой машине, чтобы использовать для сетевого учебного расчета. Если вы обучаете сеть с помощью данных в мини-пакетном datastore с фоновой включенной отправкой, то остающиеся рабочие выбирают и предварительно обрабатывают данные в фоновом режиме.
Числовой вектор — Сетевая учебная загрузка для каждого рабочего в параллельном пуле. Для векторного W
, рабочий i
получает дробный W(i)/sum(W)
из работы (количество примеров на мини-пакет). Если вы обучаете сеть с помощью данных в мини-пакетном datastore с фоновой включенной отправкой, то можно присвоить загрузку рабочего 0, чтобы использовать того рабочего для выбирающих данных в фоновом режиме. Заданный вектор должен содержать одно значение на рабочего в параллельном пуле.
Если параллельный пул имеет доступ к графическим процессорам, то рабочие без уникального графического процессора никогда не используются для учебного расчета. Значение по умолчанию для пулов с помощью графических процессоров должно использовать всех рабочих с помощью уникального графического процессора для учебного расчета и остающихся рабочих для фоновой отправки. Если пул не имеет доступа к графическим процессорам, и центральные процессоры используются для обучения, то значение по умолчанию должно использовать одного рабочего на машину для фоновой отправки данных.
'DispatchInBackground'
— Используйте фоновую отправкуfalse
(значение по умолчанию) | true
Используйте фоновую отправку (асинхронная постановка в очередь упреждающей выборки), чтобы считать обучающие данные из хранилищ данных в виде false
или true
. Фоновая отправка требует Parallel Computing Toolbox.
DispatchInBackground
только поддерживается для хранилищ данных, которые partitionable. Для получения дополнительной информации смотрите 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;
Для большинства задач глубокого обучения можно использовать предварительно обученную сеть и адаптировать ее к собственным данным. Для примера, показывающего, как использовать передачу обучения, чтобы переобучить сверточную нейронную сеть, чтобы классифицировать новый набор изображений, смотрите, Обучают Нейронную сеть для глубокого обучения Классифицировать Новые Изображения. В качестве альтернативы можно создать и обучить нейронные сети с нуля с помощью 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, и 1 000 обновлений параметра, соответственно. Можно задать β2 при помощи 'SquaredGradientDecayFactor'
аргумент пары "имя-значение". Алгоритм RMSProp использует это скользящее среднее значение, чтобы нормировать обновления каждого параметра индивидуально,
где деление выполняется поэлементное. Используя RMSProp эффективно уменьшает скорости обучения параметров с большими градиентами и увеличивает скорости обучения параметров с маленькими градиентами. ɛ является маленькой константой, добавленной, чтобы избежать деления на нуль. Можно задать ɛ при помощи 'Epsilon'
аргумент пары "имя-значение", но значение по умолчанию обычно работает хорошо. Чтобы использовать RMSProp, чтобы обучить нейронную сеть, задайте solverName
как 'rmsprop'
.
Адам (выведенный из адаптивной оценки момента) [4] использование обновление параметра, которое похоже на RMSProp, но с добавленным сроком импульса. Это сохраняет поэлементное скользящее среднее значение и градиентов параметра и их значений в квадрате,
Можно задать β1 и уровни затухания β2 с помощью 'GradientDecayFactor'
и 'SquaredGradientDecayFactor'
аргументы пары "имя-значение", соответственно. Адам использует скользящие средние значения, чтобы обновить сетевые параметры как
Если градиенты по многим итерациям подобны, то использование скользящего среднего значения градиента позволяет обновлениям параметра взять импульс в определенном направлении. Если градиенты содержат в основном шум, то скользящее среднее значение градиента становится меньшим, и таким образом, обновления параметра становятся меньшими также. Можно задать ɛ при помощи 'Epsilon'
аргумент пары "имя-значение". Значение по умолчанию обычно работает хорошо, но для определенных проблем значение, столь же большое как 1, работает лучше. Чтобы использовать Адама, чтобы обучить нейронную сеть, задайте solverName
как 'adam'
. Полное обновление Адама также включает механизм, чтобы откорректировать смещение появляться в начале обучения. Для получения дополнительной информации см. [4].
Задайте скорость обучения α для всех алгоритмов оптимизации с помощью the'InitialLearnRate'
аргумент пары "имя-значение". Эффект скорости обучения отличается для различных алгоритмов оптимизации, таким образом, оптимальные скорости обучения также отличаются в целом. Можно также задать скорости обучения, которые отличаются слоями и параметром. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.
Если увеличение градиентов величины экспоненциально, то обучение нестабильно и может отличаться в нескольких итерациях. Этот "взрыв градиента" обозначается учебной потерей, которая переходит к NaN
или Inf
. Усечение градиента помогает предотвратить взрыв градиента путем стабилизации обучения на уровнях высшего образования и в присутствии выбросов [3]. Усечение градиента позволяет сетям быть обученными быстрее и обычно не влияет на точность изученной задачи.
Существует два типа усечения градиента.
Основанное на норме усечение градиента перемасштабирует градиент на основе порога и не изменяет направление градиента. 'l2norm'
и 'global-l2norm'
значения GradientThresholdMethod
основанные на норме методы усечения градиента.
Основанное на значении усечение градиента отсекает любую частную производную, больше, чем порог, который может привести к градиенту, произвольно изменяющему направление. Основанное на значении усечение градиента может иметь непредсказуемое поведение, но достаточно небольшие изменения не заставляют сеть отличаться. 'absolute-value'
значение GradientThresholdMethod
основанный на значении метод усечения градиента.
Для примеров смотрите, что Временные ряды Предсказывают Используя Классификацию Глубокого обучения и От последовательности к последовательности Используя Глубокое обучение.
Добавление регуляризации называет для весов к функции потерь один путь состоит в том, чтобы уменьшать сверхподбор кривой [1], [2]. Срок регуляризации также называется затуханием веса. Функция потерь со сроком регуляризации принимает форму
где вектор веса, фактор регуляризации (коэффициент) и функция регуляризации
Обратите внимание на то, что смещения не упорядочены [2]. Можно задать фактор регуляризации при помощи 'L2Regularization'
аргумент пары "имя-значение". Можно также задать различные факторы регуляризации для различных слоев и параметров. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.
Функция потерь, что использование программного обеспечения для сетевого обучения включает срок регуляризации. Однако значение потерь, отображенное в командном окне и графике процесса обучения во время обучения, является потерей на данных только и не включает срок регуляризации.
'ValidationPatience'
значением по умолчанию опции обучения является Inf
Поведение изменяется в R2018b
Начиная в R2018b, значении по умолчанию 'ValidationPatience'
опцией обучения является Inf
, что означает, что автоматическая остановка через валидацию выключена. Это поведение препятствует обучению остановиться перед достаточным приобретением знаний из данных.
В предыдущих версиях значением по умолчанию является 5
. Чтобы воспроизвести это поведение, установите 'ValidationPatience'
опция к 5
.
Поведение изменяется в R2018b
Начиная в R2018b, при сохранении сетей контрольной точки, программное обеспечение присваивает имена файлов, начинающиеся с net_checkpoint_
. В предыдущих версиях программное обеспечение присваивает имена файлов, начинающиеся с convnet_checkpoint_
.
Если у вас есть код, который сохраняет и загружает сети контрольной точки, то обновите свой код, чтобы загрузить файлы с новым именем.
[1] Епископ, C. M. Распознавание образов и машинное обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.
[2] Мерфи, K. P. Машинное обучение: вероятностная перспектива. Нажатие MIT, Кембридж, Массачусетс, 2012.
[3] Pascanu, R., Т. Миколов и И. Бенхио. "На трудности учебных рекуррентных нейронных сетей". Продолжения 30-й Международной конференции по вопросам Машинного обучения. Издание 28 (3), 2013, стр 1310–1318.
[4] Kingma, Дидерик и Джимми Ба. "Адам: метод для стохастической оптимизации". arXiv предварительно распечатывают arXiv:1412.6980 (2014).
analyzeNetwork
| Deep Network Designer | trainNetwork
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.