Опции обучения для стохастического градиентного спуска с импульсом
Опции обучения для стохастического градиентного спуска с импульсом, включая информацию о скорости обучения, фактор регуляризации L2 и мини-пакетный размер.
Создайте TrainingOptionsSGDM
объектное использование trainingOptions
и определение 'sgdm'
как solverName
входной параметр.
Plots
— Графики отобразиться во время сетевого обучения'none'
| 'training-progress'
Графики отобразиться во время сетевого обучения в виде одного из следующего:
'none'
— Не отображайте графики во время обучения.
'training-progress'
— Постройте процесс обучения. График показывает мини-пакетную потерю и точность, потерю валидации и точность и дополнительную информацию о процессе обучения. График имеет кнопку остановки в верхнем правом углу. Нажмите кнопку, чтобы остановить обучение и возвратить текущее состояние сети.
Verbose
— Индикатор, чтобы отобразить информацию о процессе обучения
| 0
Индикатор, чтобы отобразить информацию о процессе обучения в командном окне в виде 1
TRUE
) или 0
ложь
).
Отображенная информация включает номер эпохи, номер итерации, время протекло, мини-пакетная потеря, мини-пакетная точность и основная скорость обучения. Когда вы обучаете сеть регрессии, среднеквадратичную ошибку (RMSE) показывают вместо точности. Если вы проверяете сеть во время обучения, то отображенная информация также включает потерю валидации и точность валидации (или RMSE).
Типы данных: логический
VerboseFrequency
— Частота многословной печатиЧастота многословной печати, которая является количеством итераций между печатью к командному окну в виде положительного целого числа. Это свойство только оказывает влияние когда Verbose
значение равняется true
.
Если вы проверяете сеть во время обучения, то trainNetwork
печать к командному окну каждый раз валидация происходит.
MaxEpochs
— Максимальное количество эпохМаксимальное количество эпох, чтобы использовать для обучения в виде положительного целого числа.
Итерация является одним шагом, сделанным в алгоритме градиентного спуска к минимизации функции потерь с помощью мини-пакета. Эпоха является всей передачей алгоритма настройки по целому набору обучающих данных.
MiniBatchSize
— Размер мини-пакетаРазмер мини-пакета, чтобы использовать для каждой учебной итерации в виде положительного целого числа. Мини-пакет является подмножеством набора обучающих данных, который используется, чтобы оценить градиент функции потерь и обновить веса.
Shuffle
— Опция для перестановки данных'once'
| 'never'
| 'every-epoch'
Опция для перестановки данных в виде одного из следующего:
'once'
— Переставьте данные об обучении и валидации однажды обучение.
'never'
— Не переставляйте данные.
'every-epoch'
— Переставьте обучающие данные перед каждой учебной эпохой и переставьте данные о валидации перед каждой сетевой валидацией. Если мини-пакетный размер равномерно не делит количество обучающих выборок, то trainNetwork
отбрасывает обучающие данные, который не помещается в итоговый полный мини-пакет каждой эпохи. Установите Shuffle
значение к 'every-epoch'
постараться не отбрасывать те же данные каждая эпоха.
ValidationData
— Данные, чтобы использовать для валидации во время обученияДанные, чтобы использовать для валидации во время обучения в виде datastore изображений, datastore, таблицы или массива ячеек. Формат данных о валидации зависит от типа задачи, и соответствуйте допустимым входным параметрам к trainNetwork
функция.
Задайте данные о валидации как одно из следующего:
Входной параметр | trainNetwork Аргумент | |
---|---|---|
ImageDatastore | imds | |
Datastore | ds | |
Таблица | tbl | |
Массив ячеек {X,Y} | X | X |
Y | Y | |
Массив ячеек {sequences,Y} | sequences | sequences |
Y | Y |
Во время обучения, trainNetwork
вычисляет точность валидации и потерю валидации на данных о валидации. Чтобы задать частоту валидации, используйте 'ValidationFrequency'
аргумент пары "имя-значение". Можно также использовать данные о валидации, чтобы остановить обучение автоматически, когда потеря валидации прекращает уменьшаться. Чтобы включить автоматическую остановку валидации, используйте 'ValidationPatience'
аргумент пары "имя-значение".
Если ваша сеть имеет слои, которые ведут себя по-другому во время предсказания, чем во время обучения (например, слои уволенного), то точность валидации может быть выше, чем учебная (мини-пакетная) точность.
Данные о валидации переставляются согласно 'Shuffle'
значение. Если 'Shuffle'
значение равняется 'every-epoch'
, затем данные о валидации переставляются перед каждой сетевой валидацией.
ValidationFrequency
— Частота сетевой валидацииЧастота сетевой валидации в количестве итераций в виде положительного целого числа.
ValidationFrequency
значение является количеством итераций между оценками метрик валидации.
ValidationPatience
— Терпение остановки валидацииInf
Терпение остановки валидации сетевого обучения в виде положительного целого числа или Inf
.
'ValidationPatience'
значение является числом раз, что потеря на наборе валидации может быть больше, чем или равняться ранее самой маленькой потере, прежде чем сетевое обучение остановится.
InitialLearnRate
— Начальная скорость обученияНачальная скорость обучения используется для обучения в виде положительной скалярной величины. Если скорость обучения является слишком низкой, то обучение занимает много времени. Если скорость обучения слишком высока, то обучение может достигнуть субоптимального результата.
LearnRateScheduleSettings
— Настройки для расписания скорости обученияНастройки для скорости обучения планируют в виде структуры. LearnRateScheduleSettings
имеет поле Method
, который задает тип метода для корректировки скорости обучения. Возможные методы:
'none'
— Скорость обучения является постоянной в течение обучения.
'piecewise'
— Скорость обучения понижается периодически во время обучения.
Если Method
'piecewise'
, затем LearnRateScheduleSettings
содержит еще два поля:
DropRateFactor
— Мультипликативный фактор, которым скорость обучения понижается во время обучения
DropPeriod
— Номер эпох, который передает между корректировками скорости обучения во время обучения
Задайте настройки для использования уровня расписания изучения trainingOptions
.
Типы данных: struct
L2Regularization
— Фактор для L2 regularizerФактор для L2 regularizer (затухание веса) в виде неотрицательного скаляра.
Можно задать множитель для L2 regularizer для слоев сети с настраиваемыми параметрами.
Momentum
— Вклад предыдущего шага градиентаВклад градиента продвигается от предыдущей итерации до текущей итерации обучения в виде скалярного значения от 0 до 1. Значение 0 средних значений никакой вклад от предыдущего шага, тогда как значение 1 среднего значения максимальный вклад от предыдущего шага. Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.
GradientThreshold
— Порог градиентаInf
Положительный порог для градиента в виде положительной скалярной величины или Inf
. Когда градиент превышает значение GradientThreshold
, затем градиент отсекается согласно GradientThresholdMethod
.
GradientThresholdMethod
— Пороговый метод градиента'l2norm'
| 'global-l2norm'
| 'absolutevalue'
Пороговый метод градиента раньше отсекал значения градиента, которые превышают порог градиента в виде одного из следующего:
'l2norm'
— Если норма L2 градиента настраиваемого параметра больше, чем GradientThreshold
, затем масштабируйте градиент так, чтобы норма L2 равнялась GradientThreshold
.
'global-l2norm'
— Если глобальная норма L2, L, больше, чем GradientThreshold
, затем масштабируйте все градиенты на коэффициент GradientThreshold/
L. Глобальная норма L2 рассматривает все настраиваемые параметры.
'absolute-value'
— Если абсолютное значение отдельной частной производной в градиенте настраиваемого параметра больше, чем GradientThreshold
, затем масштабируйте частную производную, чтобы иметь величину, равную GradientThreshold
и сохраните знак частной производной.
Для получения дополнительной информации смотрите, что Градиент Отсекает.
ResetInputNormalization
— Опция, чтобы сбросить входную нормализацию слояtrue
(значение по умолчанию) | false
Опция, чтобы сбросить входную нормализацию слоя в виде одного из следующего:
true
– Сбросьте входную статистику нормализации слоя и повторно вычислите их в учебное время.
false
– Вычислите статистику нормализации в учебное время, когда они будут пусты.
SequenceLength
— Опция, чтобы заполнить или обрезать последовательности'longest'
| 'shortest'
| положительное целое числоОпция, чтобы заполнить, обрежьте или разделите входные последовательности в виде одного из следующего:
'longest'
— Заполните последовательности в каждом мини-пакете, чтобы иметь ту же длину как самая длинная последовательность. Эта опция не отбрасывает данных, хотя дополнение может ввести шум сети.
'shortest'
— Усеченные последовательности в каждом мини-пакете, чтобы иметь ту же длину как самая короткая последовательность. Эта опция гарантирует, что никакое дополнение не добавляется, за счет отбрасывания данных.
Положительное целое число — Для каждого мини-пакета, заполните последовательности к самому близкому кратному заданная длина, которая больше самой долгой длины последовательности в мини-пакете, и затем разделяет последовательности в меньшие последовательности заданной длины. Если разделение происходит, то программное обеспечение создает дополнительные мини-пакеты. Используйте эту опцию, если полные последовательности не умещаются в памяти. В качестве альтернативы попытайтесь сократить количество последовательностей на мини-пакет путем установки 'MiniBatchSize'
опция к нижнему значению.
Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.
SequencePaddingDirection
— Направление дополнения или усечения'right'
(значение по умолчанию) | 'left'
Направление дополнения или усечения в виде одного из следующего:
'right'
— Заполните или обрежьте последовательности справа. Последовательности запускают одновременно шаг, и программное обеспечение обрезает или добавляет дополнение в конец последовательностей.
'left'
— Заполните или обрежьте последовательности слева. Программное обеспечение обрезает или добавляет дополнение в запуск последовательностей так, чтобы конец последовательностей одновременно продвинулся.
Поскольку слои LSTM обрабатывают данные о последовательности один временной шаг за один раз, когда слой OutputMode
свойством является 'last'
, любое дополнение в итоговых временных шагах может негативно влиять на слой выход. Чтобы заполнить или обрезать данные о последовательности слева, установите 'SequencePaddingDirection'
опция к 'left'
.
Для сетей от последовательности к последовательности (когда OutputMode
свойством является 'sequence'
для каждого слоя LSTM), любой дополняющий в первых временных шагах может негативно влиять на предсказания для более ранних временных шагов. Чтобы заполнить или обрезать данные о последовательности справа, установите 'SequencePaddingDirection'
опция к 'right'
.
Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.
SequencePaddingValue
— Значение, чтобы заполнить последовательностиЗначение, которым можно заполнить входные последовательности в виде скаляра. Опция допустима только когда SequenceLength
'longest'
или положительное целое число. Не заполняйте последовательности NaN
, потому что выполнение так может распространить ошибки в сети.
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
опции обучения количеством графических процессоров.
Учебные длинные краткосрочные сети памяти поддерживают один центральный процессор или одно обучение графического процессора только.
Задайте использование среды выполнения trainingOptions
.
Типы данных: char |
string
WorkerLoad
— Найдите что-либо подобное делению загрузки рабочегоДеление загрузки рабочего для графических процессоров или центральных процессоров в виде скаляра от 0 до 1, положительное целое число или числовой вектор. Это свойство оказывает влияние только когда ExecutionEnvironment
значение равняется 'multi-gpu'
или 'parallel'
.
CheckpointPath
— Путь для сохранения сетей контрольной точкиПуть, где сети контрольной точки сохранены в виде вектора символов.
Типы данных: char
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
Создайте набор опций для обучения сеть с помощью стохастического градиентного спуска с импульсом. Уменьшайте скорость обучения на коэффициент 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
trainingOptions
| trainNetwork
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.