Опции для обучения глубокой нейронной сети
возвращает опции обучения для оптимизатора, заданного 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 LearnRateScheduleSettings: [1x1 struct] 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
Когда вы обучаете нейронные сети для глубокого обучения, часто полезно контролировать процесс обучения. Путем графического вывода различных метрик во время обучения можно изучить, как обучение прогрессирует. Например, можно определить, если и как быстро сетевая точность улучшается, и начинает ли сеть сверхсоответствовать обучающим данным.
Когда вы задаете 'training-progress'
как 'Plots'
значение в trainingOptions
и запустите сетевое обучение, trainNetwork
создает фигуру и отображает учебные метрики в каждой итерации. Каждая итерация является оценкой градиента и обновлением сетевых параметров. Если вы задаете данные о валидации в trainingOptions
, затем рисунок показывает метрики валидации каждый раз trainNetwork
подтверждает сеть. Фигура строит следующее:
Учебная точность — точность Классификации на каждом отдельном мини-пакете.
Сглаживавшая учебная точность — Сглаживавшая учебная точность, полученная путем применения алгоритма сглаживания для учебной точности. Это является менее шумным, чем не сглаживавшая точность, облегчая определять тренды.
Точность валидации — точность Классификации на целом наборе валидации (заданное использование trainingOptions
).
Учебная потеря, сглаживавшая учебная потеря и потеря валидации — потеря на каждом мини-пакете, его сглаживавшей версии и потере на наборе валидации, соответственно. Если последним слоем вашей сети является classificationLayer
, затем функция потерь является перекрестной энтропийной потерей. Для получения дополнительной информации о функциях потерь для классификации и проблем регрессии, смотрите Выходные Слои.
Для сетей регрессии фигура строит среднеквадратичную ошибку (RMSE) вместо точности.
Фигура отмечает каждую учебную Эпоху с помощью теневого фона. Эпоха является всей передачей через целый набор данных.
Во время обучения можно остановить обучение и возвратить текущее состояние сети путем нажатия кнопки остановки в верхнем правом углу. Например, вы можете хотеть остановить обучение, когда точность сети достигает плато, и ясно, что точность больше не улучшается. После того, как вы нажмете кнопку остановки, она может требовать времени для обучения завершиться. Если обучение завершено, trainNetwork
возвращает обучивший сеть.
Когда обучение закончится, просмотрите Результаты, показывающие итоговую точность валидации и причину то законченное обучение. Итоговые метрики валидации помечены Final в графиках. Если ваша сеть содержит пакетные слои нормализации, то итоговые метрики валидации часто отличаются от метрик валидации, оцененных во время обучения. Это вызвано тем, что пакетные слои нормализации в итоговой сети выполняют различные операции, чем во время обучения.
Справа, просмотрите информацию в учебное время и настройки. Чтобы узнать больше об опциях обучения, смотрите Настроенные Параметры и Обучите Сверточную нейронную сеть.
Постройте процесс обучения во время обучения
Обучите сеть и постройте процесс обучения во время обучения.
Загрузите обучающие данные, который содержит 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 изображений, datastore, который возвращает данные в ячейке таблицы 2D столбца или массиве 2D ячейки столбца, таблице или массиве ячеек. Формат данных о валидации зависит от типа задачи, и соответствуйте допустимым входным параметрам к trainNetwork
функция.
Эта опция поддерживает сети с одним входом только.
Для данных изображения задайте данные о валидации как одно из следующего:
Входной параметр | Описание | Больше информации | |
---|---|---|---|
ImageDatastore |
| imds аргумент trainNetwork | |
Datastore | Datastore, который возвращает данные в ячейке таблицы 2D столбца или массиве 2D ячейки столбца, где эти два столбца задают сетевые входные параметры и ожидаемые ответы, соответственно. | ds аргумент trainNetwork | |
Таблица | Таблица, где первый столбец содержит или каналы передачи изображения или изображения и последующие столбцы, содержит ответы. | tbl аргумент trainNetwork | |
Массив ячеек {X,Y} | X | Числовой массив изображений. | X аргумент trainNetwork |
Y | Категориальный вектор меток, матрица числовых ответов или массив изображений. | Y аргумент trainNetwork |
Для последовательности и данных временных рядов, задайте данные о валидации как одно из следующего:
Входной параметр | Описание | Больше информации | |
---|---|---|---|
Массив ячеек {sequences,Y} | sequences | Массив ячеек последовательностей или данных временных рядов. | sequences аргумент trainNetwork |
Y | Категориальный вектор меток, массив ячеек категориальных последовательностей, матрица числовых ответов или массив ячеек числовых последовательностей. | Y аргумент trainNetwork | |
Таблица | Таблица, содержащая пути к абсолютному или файлу прямого доступа к MAT файлы, содержащие последовательность или данные временных рядов. | tbl аргумент 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 для сетевых слоев learnable параметрами. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.
Пример: 'L2Regularization',0.0005
Типы данных: single
| double
'Momentum'
— Вклад предыдущего шагаВклад параметра обновляет шаг предыдущей итерации к текущей итерации стохастического градиентного спуска с импульсом, заданным как разделенная запятой пара, состоящая из 'Momentum'
и скаляр от 0 до 1. Значение 0 средних значений никакой вклад от предыдущего шага, тогда как значение 1 среднего значения максимальный вклад от предыдущего шага.
Задавать 'Momentum'
значение, необходимо установить solverName
быть 'sgdm'
. Значение по умолчанию работает хорошо на большинство проблем. Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.
Пример: 'Momentum',0.95
Типы данных: single
| double
'GradientDecayFactor'
— Уровень затухания скользящего среднего значения градиентаУровень затухания скользящего среднего значения градиента для решателя Адама, заданного как разделенная запятой пара, состоящая из 'GradientDecayFactor'
и скаляр от 0 до 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 обновлений параметра, соответственно. Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.
Если solverName
'adam'
, затем значение по умолчанию 'SquaredGradientDecayFactor'
0.999. Если solverName
'rmsprop'
, затем значение по умолчанию 'SquaredGradientDecayFactor'
0.9.
Пример: 'SquaredGradientDecayFactor',0.99
Типы данных: single
| double
'Epsilon'
— Знаменатель возмещенСмещение знаменателя для Адама и решателей RMSProp, заданных как разделенная запятой пара, состоящая из 'Epsilon'
и положительная скалярная величина. Решатель добавляет смещение к знаменателю в сетевых обновлениях параметра, чтобы избежать деления на нуль.
Задавать 'Epsilon'
значение, необходимо установить solverName
быть 'adam'
или 'rmsprop'
. Значение по умолчанию работает хорошо на большинство проблем. Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.
Пример: 'Epsilon',1e-6
Типы данных: single
| double
'ResetInputNormalization'
— Опция, чтобы сбросить входную нормализацию слояtrue
(значение по умолчанию) | false
Опция, чтобы сбросить входную нормализацию слоя, заданную как одно из следующего:
true
– Сбросьте входную статистику нормализации слоя и повторно вычислите их в учебное время.
false
– Вычислите статистику нормализации в учебное время, когда они будут пусты.
'GradientThreshold'
— Порог градиентаInf
(значение по умолчанию) | положительная скалярная величинаПорог градиента, заданный как разделенная запятой пара, состоящая из 'GradientThreshold'
и Inf
или положительная скалярная величина. Если градиент превышает значение GradientThreshold
, затем градиент отсекается согласно GradientThresholdMethod
.
Пример: 'GradientThreshold',6
'GradientThresholdMethod'
— Пороговый метод градиента'l2norm'
(значение по умолчанию) | 'global-l2norm'
| 'absolute-value'
Пороговый метод градиента раньше отсекал значения градиента, которые превышают порог градиента, заданный как разделенная запятой пара, состоящая из 'GradientThresholdMethod'
и одно из следующего:
'l2norm'
— Если норма L2 градиента learnable параметра больше, чем GradientThreshold
, затем масштабируйте градиент так, чтобы норма L2 равнялась GradientThreshold
.
'global-l2norm'
— Если глобальная норма L2, L, больше, чем GradientThreshold
, затем масштабируйте все градиенты фактором GradientThreshold/
L. Глобальная норма L2 рассматривает все learnable параметры.
'absolute-value'
— Если абсолютное значение отдельной частной производной в градиенте learnable параметра больше, чем 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'
— Используйте локальный или удаленный параллельный пул на основе своего кластерного профиля по умолчанию. Если нет никакого текущего параллельного пула, программное обеспечение запускает тот с помощью кластерного профиля по умолчанию. Если пул имеет доступ к графическим процессорам, то только рабочие с помощью уникального графического процессора выполняют учебный расчет. Если пул не имеет графических процессоров, то обучение происходит на всех доступных рабочих центрального процессора вместо этого.
Для получения дополнительной информации о том, когда использовать различные среды выполнения, смотрите, Увеличивают Глубокое обучение в параллели и в облаке.
Графический процессор, мультиграфический процессор и параллельные опции требуют Parallel Computing Toolbox™. Чтобы использовать графический процессор в глубоком обучении, у вас должен также быть CUDA®, включенный NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Если вы выбираете одну из этих опций и 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
объект, соответственно.
Для большинства задач глубокого обучения можно использовать предварительно обученную сеть и адаптировать ее к собственным данным. Для примера, показывающего, как использовать передачу, учащуюся переобучать сверточную нейронную сеть, чтобы классифицировать новый набор изображений, смотрите, Обучают Нейронную сеть для глубокого обучения Классифицировать Новые Изображения. В качестве альтернативы можно создать и обучить нейронные сети с нуля с помощью layerGraph
объекты с trainNetwork
и trainingOptions
функции.
Если trainingOptions
функция не обеспечивает опции обучения, в которых вы нуждаетесь для своей задачи, затем можно создать пользовательский учебный цикл с помощью автоматического дифференцирования. Чтобы узнать больше, смотрите, Задают Пользовательские Учебные Циклы.
Значением по умолчанию для начальных весов является Распределение Гаусса со средним значением 0 и стандартным отклонением 0,01. Значение по умолчанию для начального значения смещения 0. Можно вручную изменить инициализацию для весов и смещения. Смотрите Задают Начальные Веса и Смещения в Сверточном Слое и Задают Начальные Веса и Смещения в Полносвязном слое.
Стандартный алгоритм градиентного спуска обновляет сетевые параметры (веса и смещения), чтобы минимизировать функцию потерь путем делания небольших шагов в каждой итерации в направлении отрицательного градиента потери,
где номер итерации, темп обучения, вектор параметра, и функция потерь. В стандартном алгоритме градиентного спуска, градиенте функции потерь, , оценен с помощью целого набора обучающих данных, и стандартный алгоритм градиентного спуска использует целый набор данных целиком.
В отличие от этого, в каждой итерации стохастический алгоритм градиентного спуска оценивает градиент и обновляет параметры с помощью подмножества обучающих данных. Различное подмножество, названное мини-пакетом, используется в каждой итерации. Вся передача учебного алгоритма по целому набору обучающих данных с помощью мини-пакетов является одной эпохой. Стохастический градиентный спуск является стохастическим, потому что вычисленное использование обновлений параметра мини-пакета является шумной оценкой обновления параметра, которое следовало бы из использования полного набора данных. Можно задать мини-пакетный размер и максимальное количество эпох при помощи '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'
аргумент пары "имя-значение". Можно также задать различные факторы регуляризации для различных слоев и параметров. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.
Функция потерь, что использование программного обеспечения для сетевого обучения включает срок регуляризации. Однако значение потерь, отображенное в командном окне и графике процесса обучения во время обучения, является потерей на данных только и не включает срок регуляризации.
Поведение изменяется в 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).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.