trainingOptions

Опции для обучения глубокой нейронной сети

Синтаксис

options = trainingOptions(solverName)
options = trainingOptions(solverName,Name,Value)

Описание

пример

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
         DispatchInBackground: 0

Когда вы обучаете нейронные сети для глубокого обучения, часто полезно контролировать учебный прогресс. Путем графического вывода различных метрик во время обучения можно изучить, как обучение прогрессирует. Например, можно определить, если и как быстро сетевая точность улучшается, и начинает ли сеть сверхсоответствовать данным тренировки.

Когда вы задаете '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);

Входные параметры

свернуть все

Решатель для того, чтобы обучить сеть, заданный как одно из следующего:

  • 'sgdm' — Используйте стохастический спуск градиента с импульсом (SGDM) оптимизатор. Можно задать значение импульса с помощью аргумента пары "имя-значение" 'Momentum'.

  • 'rmsprop' — Используйте оптимизатор RMSProp. Можно задать уровень затухания скользящего среднего значения градиента в квадрате с помощью аргумента пары "имя-значение" 'SquaredGradientDecayFactor'.

  • 'adam' — Используйте оптимизатор Адама. Можно задать уровни затухания градиента и скользящих средних значений градиента в квадрате с помощью аргументов пары "имя-значение" 'GradientDecayFactor' и 'SquaredGradientDecayFactor', соответственно.

Для получения дополнительной информации о других решателях, смотрите Стохастический Спуск Градиента.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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','training-progress'

Индикатор, чтобы отобразить учебную информацию о прогрессе в командном окне, заданном как пара, разделенная запятой, состоящая из 'Verbose' и или 1 (true) или 0 (false).

Многословный вывод отображает следующую информацию:

Сети классификации

Поле Описание
EpochНомер эпохи. Эпоха соответствует всей передаче данных.
IterationНомер итерации. Итерация соответствует мини-пакету.
Time ElapsedВремя протекло в часах, минутах и секундах.
Mini-batch AccuracyТочность классификации на мини-пакете.
Validation AccuracyТочность классификации на данных о валидации. Если вы не задаете данные о валидации, то функция не отображает это поле.
Mini-batch LossПотеря на мини-пакете. Если выходной слой является объектом ClassificationOutputLayer, то потеря является перекрестной энтропийной потерей для проблем классификации мультиклассов со взаимоисключающими классами.
Validation LossПотеря на данных о валидации. Если выходной слой является объектом ClassificationOutputLayer, то потеря является перекрестной энтропийной потерей для проблем классификации мультиклассов со взаимоисключающими классами. Если вы не задаете данные о валидации, то функция не отображает это поле.
Base Learning RateОсновной темп обучения. Программное обеспечение умножает изучить факторы уровня слоев этим значением.

Сети регрессии

Поле Описание
EpochНомер эпохи. Эпоха соответствует всей передаче данных.
IterationНомер итерации. Итерация соответствует мини-пакету.
Time ElapsedВремя протекло в часах, минутах и секундах.
Mini-batch RMSEСреднеквадратическая ошибка (RMSE) на мини-пакете.
Validation RMSERMSE на данных о валидации. Если вы не задаете данные о валидации, то программное обеспечение не отображает это поле.
Mini-batch LossПотеря на мини-пакете. Если выходной слой является объектом RegressionOutputLayer, то потеря является половиной среднеквадратической ошибки.
Validation LossПотеря на данных о валидации. Если выходной слой является объектом RegressionOutputLayer, то потеря является половиной среднеквадратической ошибки. Если вы не задаете данные о валидации, то программное обеспечение не отображает это поле.
Base Learning RateОсновной темп обучения. Программное обеспечение умножает изучить факторы уровня слоев этим значением.

Чтобы задать данные о валидации, используйте пару "имя-значение" 'ValidationData'.

Пример: 'Verbose',false

Частота многословной печати, которая является количеством итераций между печатью к командному окну, заданному как пара, разделенная запятой, состоящая из 'VerboseFrequency' и положительным целым числом. Эта опция только имеет эффект, когда значение 'Verbose' равняется true.

Если вы подтверждаете сеть во время обучения, то trainNetwork также распечатывает к командному окну каждый раз, когда валидация происходит.

Пример: 'VerboseFrequency',100

Мини-опции пакета

свернуть все

Максимальное количество эпох, чтобы использовать для обучения, заданного как пара, разделенная запятой, состоящая из 'MaxEpochs' и положительного целого числа.

Итерация является одним шагом, сделанным в алгоритме спуска градиента к минимизации функции потерь с помощью мини-пакета. Эпоха является всей передачей учебного алгоритма по целому набору обучающих данных.

Пример: 'MaxEpochs',20

Размер мини-пакета, чтобы использовать для каждой учебной итерации, заданной как пара, разделенная запятой, состоящая из 'MiniBatchSize' и положительного целого числа. Мини-пакет является подмножеством набора обучающих данных, который используется, чтобы оценить градиент функции потерь и обновить веса. Смотрите Стохастический Спуск Градиента.

Пример: 'MiniBatchSize',256

Опция для перестановки данных, заданная как пара, разделенная запятой, состоящая из 'Shuffle' и одно из следующего:

  • 'once' — Переставьте данные об обучении и валидации однажды обучение.

  • 'never' — Не переставляйте данные.

  • 'every-epoch' — Переставьте данные тренировки перед каждой учебной эпохой и переставьте данные о валидации перед каждой сетевой валидацией. Если мини-пакетный размер равномерно не делит количество учебных выборок, то trainNetwork отбрасывает данные тренировки, который не помещается в итоговый полный мини-пакет каждой эпохи. Чтобы постараться не отбрасывать те же данные каждая эпоха, установите значение 'Shuffle' к 'every-epoch'.

Пример: 'Shuffle','every-epoch'

Валидация

свернуть все

Данные, чтобы использовать для валидации во время обучения, заданного как datastore изображений, datastore, который возвращает данные в ячейке таблицы 2D столбца или массиве 2D ячейки столбца, таблице или массиве ячеек. Формат данных о валидации зависит от типа задачи, и соответствуйте допустимым входным параметрам к функции trainNetwork.

Данные изображения

Для данных изображения задайте данные о валидации как одно из следующего:

Входной параметрОписаниеБольше информации
ImageDatastore

Объект ImageDatastore с метками categorical.

Аргумент imds trainNetwork
DatastoreDatastore, который возвращает данные в ячейке таблицы 2D столбца или массиве 2D ячейки столбца, где эти два столбца задают сетевые входные параметры и ожидаемые ответы, соответственно.Аргумент ds trainNetwork
Таблица

Таблица, где первый столбец содержит или каналы передачи изображения или изображения и последующие столбцы, содержит ответы.

Аргумент tbl trainNetwork
Массив ячеек {X,Y}X

Числовой массив изображений.

Аргумент X trainNetwork
Y

Категориальный вектор меток, матрица числовых ответов или массив изображений.

Аргумент Y trainNetwork

Последовательность и данные временных рядов

Для последовательности и данных временных рядов, задайте данные о валидации как одно из следующего:

Входной параметрОписаниеБольше информации
Массив ячеек {C,Y}C

Массив ячеек последовательностей или данных временных рядов.

Аргумент C trainNetwork
Y

Категориальный вектор меток, массив ячеек категориальных последовательностей, матрица числовых ответов или массив ячеек числовых последовательностей.

Аргумент Y trainNetwork
Таблица

Таблица, содержащая пути к абсолютному или файлу прямого доступа к MAT файлы, содержащие последовательность или данные временных рядов.

Аргумент tbl trainNetwork

Во время обучения trainNetwork вычисляет точность валидации и потерю валидации на данных о валидации. Чтобы задать частоту валидации, используйте аргумент пары "имя-значение" 'ValidationFrequency'. Можно также использовать данные о валидации, чтобы остановить обучение автоматически, когда потеря валидации прекращает уменьшаться. Чтобы включить автоматическую остановку валидации, используйте аргумент пары "имя-значение" 'ValidationPatience'.

Если ваша сеть имеет слои, которые ведут себя по-другому во время прогноза, чем во время обучения (например, слои уволенного), то точность валидации может быть выше, чем учебная (мини-пакетная) точность.

Данные о валидации переставляются согласно значению 'Shuffle'. Если значение 'Shuffle' равняется 'every-epoch', то данные о валидации переставляются перед каждой сетевой валидацией.

Частота сетевой валидации в количестве итераций, заданных как пара, разделенная запятой, состоящая из 'ValidationFrequency' и положительного целого числа.

Значение 'ValidationFrequency' является количеством итераций между оценками метрик валидации. Чтобы задать данные о валидации, используйте аргумент пары "имя-значение" 'ValidationData'.

Пример: 'ValidationFrequency',20

Терпение остановки валидации сетевого обучения, заданного как пара, разделенная запятой, состоящая из 'ValidationPatience' и положительного целого числа или Inf.

Значение 'ValidationPatience' является числом раз, что потеря на наборе валидации может быть больше, чем или равняться ранее самой маленькой потере, прежде чем сетевое обучение остановится. Чтобы включить автоматическую остановку валидации, задайте положительное целое число как значение 'ValidationPatience'. Если вы используете значение по умолчанию Inf, то учебные остановки после максимального количества эпох. Чтобы задать данные о валидации, используйте аргумент пары "имя-значение" 'ValidationData'.

Пример: 'ValidationPatience',5

Опции решателя

свернуть все

Начальный темп обучения используется для обучения, заданного как пара, разделенная запятой, состоящая из 'InitialLearnRate' и положительной скалярной величины. Значение по умолчанию 0.01 для решателя 'sgdm' и 0.001 для решателей 'adam' и 'rmsprop'. Если темп обучения является слишком низким, то обучение занимает много времени. Если темп обучения слишком высок, то учебная сила достигает субоптимального результата или отличается.

Пример: 'InitialLearnRate',0.03

Типы данных: single | double

Опция для отбрасывания темпа обучения во время обучения, заданного как пара, разделенная запятой, состоящая из 'LearnRateSchedule' и одно из следующего:

  • 'none' Темп обучения остается постоянным в течение обучения.

  • 'piecewise' — Обновления программного обеспечения темп обучения каждое определенное число эпох путем умножения с определенным фактором. Используйте аргумент пары "имя-значение" LearnRateDropFactor, чтобы задать значение этого фактора. Используйте аргумент пары "имя-значение" LearnRateDropPeriod, чтобы задать номер эпох между умножением.

Пример: 'LearnRateSchedule','piecewise'

Номер эпох для отбрасывания темпа обучения, заданного как пара, разделенная запятой, состоящая из 'LearnRateDropPeriod' и положительного целого числа. Эта опция допустима только, когда значением LearnRateSchedule является 'piecewise'.

Программное обеспечение умножается, глобальный темп обучения с отбрасыванием учитывают каждый раз конкретное количество передач эпох. Задайте фактор отбрасывания использование аргумента пары "имя-значение" LearnRateDropFactor.

Пример: 'LearnRateDropPeriod',3

Фактор для отбрасывания темпа обучения, заданного как пара, разделенная запятой, состоящая из 'LearnRateDropFactor' и скаляра от 0 до 1. Эта опция допустима только, когда значением LearnRateSchedule является 'piecewise'.

LearnRateDropFactor является мультипликативным фактором, чтобы примениться к темпу обучения каждый раз определенное число передач эпох. Задайте номер эпох с помощью аргумента пары "имя-значение" LearnRateDropPeriod.

Пример: 'LearnRateDropFactor',0.1

Типы данных: single | double

Фактор для регуляризации L2 (затухание веса), заданный как пара, разделенная запятой, состоящая из 'L2Regularization' и неотрицательного скаляра. Для получения дополнительной информации см. Регуляризацию L2.

Можно задать множитель для регуляризации L2 для сетевых слоев с learnable параметрами. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.

Пример: 'L2Regularization',0.0005

Типы данных: single | double

Вклад параметра обновляет шаг предыдущей итерации к текущей итерации стохастического спуска градиента с импульсом, заданным как пара, разделенная запятой, состоящая из 'Momentum' и скаляра от 0 до 1. Значение 0 средних значений никакой вклад от предыдущего шага, тогда как значение 1 среднего значения максимальный вклад от предыдущего шага.

Чтобы задать значение 'Momentum', необходимо установить solverName быть 'sgdm'. Значение по умолчанию работает хорошо на большинство проблем. Для получения дополнительной информации о других решателях, смотрите Стохастический Спуск Градиента.

Пример: 'Momentum',0.95

Типы данных: single | double

Уровень затухания скользящего среднего значения градиента для решателя Адама, заданного как пара, разделенная запятой, состоящая из 'GradientDecayFactor' и скаляра от 0 до 1. Уровень затухания градиента обозначается β1 в [4].

Чтобы задать значение 'GradientDecayFactor', необходимо установить solverName быть 'adam'. Значение по умолчанию работает хорошо на большинство проблем. Для получения дополнительной информации о других решателях, смотрите Стохастический Спуск Градиента.

Пример: 'GradientDecayFactor',0.95

Типы данных: single | double

Уровень затухания скользящего среднего значения градиента в квадрате для Адама и решателей RMSProp, заданных как пара, разделенная запятой, состоящая из 'SquaredGradientDecayFactor' и скаляра от 0 до 1. Уровень затухания градиента в квадрате обозначается β2 в [4].

Чтобы задать значение 'SquaredGradientDecayFactor', необходимо установить solverName быть 'adam' или 'rmsprop'. Типичные значения уровня затухания 0.9, 0.99, и 0.999, соответствуя усреднению длин 10, 100, и 1 000 обновлений параметра, соответственно. Для получения дополнительной информации о других решателях, смотрите Стохастический Спуск Градиента.

Пример: 'SquaredGradientDecayFactor',0.99

Типы данных: single | double

Смещение знаменателя для Адама и решателей RMSProp, заданных как пара, разделенная запятой, состоящая из 'Epsilon' и положительной скалярной величины. Решатель добавляет смещение в знаменатель в сетевых обновлениях параметра, чтобы избежать деления на нуль.

Чтобы задать значение 'Epsilon', необходимо установить solverName быть 'adam' или 'rmsprop'. Значение по умолчанию работает хорошо на большинство проблем. Для получения дополнительной информации о других решателях, смотрите Стохастический Спуск Градиента.

Пример: 'Epsilon',1e-6

Типы данных: single | double

Усечение градиента

свернуть все

Порог градиента, заданный как пара, разделенная запятой, состоящая из 'GradientThreshold' и Inf или положительной скалярной величины. Если градиент превышает значение GradientThreshold, то градиент отсекается согласно GradientThresholdMethod.

Пример: 'GradientThreshold',6

Пороговый метод градиента раньше отсекал значения градиента, которые превышают порог градиента, заданный как пара, разделенная запятой, состоящая из 'GradientThresholdMethod' и одно из следующего:

  • 'l2norm' — Если норма L2 градиента learnable параметра больше, чем GradientThreshold, то масштабируйте градиент так, чтобы норма L2 равнялась GradientThreshold.

  • 'global-l2norm' — Если глобальная норма L2, L, больше, чем GradientThreshold, то масштабируйте все градиенты фактором GradientThreshold/ L. Глобальная норма L2 рассматривает все learnable параметры.

  • Абсолютное значение Если абсолютное значение отдельной частной производной в градиенте learnable параметра больше, чем GradientThreshold, то масштабируйте частную производную, чтобы иметь значение, равное GradientThreshold и сохранить знак частной производной.

Для получения дополнительной информации смотрите, что Градиент Отсекает.

Пример: 'GradientThresholdMethod','global-l2norm'

Опции последовательности

свернуть все

Опция, чтобы заполнить, обрежьте или разделите входные последовательности, заданные как одно из следующего:

  • 'longest' — Заполните последовательности в каждом мини-пакете, чтобы иметь ту же длину как самая длинная последовательность. Эта опция не отбрасывает данных, хотя дополнение может ввести шум сети.

  • 'shortest' — Усеченные последовательности в каждом мини-пакете, чтобы иметь ту же длину как самая короткая последовательность. Эта опция гарантирует, что никакое дополнение не добавляется, за счет отбрасывания данных.

  • Положительное целое число — Для каждого мини-пакета, заполните последовательности к самому близкому кратному заданная длина, которая больше, чем самая долгая длина последовательности в мини-пакете, и затем разделяет последовательности в меньшие последовательности заданной длины. Если разделение происходит, то программное обеспечение создает дополнительные мини-пакеты. Используйте эту опцию, если полные последовательности не умещаются в памяти. Также попытайтесь сократить количество последовательностей на мини-пакет путем установки опции 'MiniBatchSize' на нижнее значение.

Если вы задаете длину последовательности как положительное целое число, то программные процессы меньшие последовательности в последовательных итерациях. Сеть обновляет сетевое состояние между последовательностями разделения.

Программное обеспечение заполняет и обрезает последовательности справа. Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.

Пример: 'SequenceLength','shortest'

Значение, которым можно заполнить входные последовательности, заданные как скаляр. Опция допустима только, когда SequenceLength является 'longest' или положительное целое число. Не заполняйте последовательности NaN, потому что выполнение так может распространить ошибки в сети.

Пример: 'SequencePaddingValue',-1

Аппаратные опции

свернуть все

Аппаратный ресурс для того, чтобы обучить сеть, заданный как одно из следующего:

  • 'auto' Используйте графический процессор, если вы доступны. В противном случае используйте центральный процессор.

  • 'cpu' — Используйте центральный процессор.

  • 'gpu' — Используйте графический процессор.

  • 'multi-gpu' — Используйте несколько графических процессоров на одной машине, с помощью локального параллельного пула. Если никакой пул не открыт, то программное обеспечение открывается один на основе ваших параллельных настроек по умолчанию.

  • 'parallel' — Используйте локальный параллельный пул или вычислите кластер. Если никакой пул не открыт, то программное обеспечение открывает тот с помощью кластерного профиля по умолчанию. Если пул имеет доступ к графическим процессорам, то только рабочие с уникальным графическим процессором выполняют учебное вычисление. Если пул не имеет графических процессоров, то обучение происходит на всех кластерных центральных процессорах.

Для получения дополнительной информации о том, когда использовать различные среды выполнения, смотрите, Увеличивают Глубокое обучение параллельно и в Облаке.

Графический процессор, мультиграфический процессор и параллельные опции требуют Параллельных вычислений, Toolbox™.To используют графический процессор для глубокого обучения, у вас должен также быть CUDA®, включенный NVIDIA®, графический процессор с вычисляет возможность 3.0 или выше. Если вы выбираете одну из этих опций и Parallel Computing Toolbox, или подходящий графический процессор не доступен, то программное обеспечение возвращает ошибку.

Чтобы видеть улучшение производительности когда обучение параллельно, попытайтесь увеличить опцию обучения MiniBatchSize, чтобы сместить коммуникацию наверху.

Учебные длинные краткосрочные сети памяти поддерживают одно обучение центрального процессора и графического процессора только.

Определенные входные хранилища данных поддерживают фоновую отправку со средами выполнения мультиграфического процессора или параллелью. Эти хранилища данных: augmentedImageDatastore, pixelLabelImageDatastore, denoisingImageDatastore и randomPatchExtractionDatastore. Другие входные хранилища данных не поддерживают 'parallel' или значения 'multi-gpu' ExecutionEnvironment с DispatchInBackground.

Пример: 'ExecutionEnvironment','cpu'

Найдите что-либо подобное делению загрузки рабочего между графическими процессорами или центральными процессорами, заданными как пара, разделенная запятой, состоящая из 'WorkerLoad' и одно из следующего:

  • Скаляр от 0 до 1 — Часть рабочих на каждой машине, чтобы использовать для сетевого учебного вычисления. Если вы обучаете сеть с помощью данных в мини-пакетном datastore с фоновой включенной отправкой, то остающиеся рабочие выбирают и предварительно обрабатывают данные в фоновом режиме.

  • Положительное целое число — Количество рабочих на каждой машине, чтобы использовать для сетевого учебного вычисления. Если вы обучаете сеть с помощью данных в мини-пакетном datastore с фоновой включенной отправкой, то остающиеся рабочие выбирают и предварительно обрабатывают данные в фоновом режиме.

  • Числовой вектор — Сетевая учебная загрузка для каждого рабочего в параллельном пуле. Для векторного W рабочий i получает дробный W(i)/sum(W) работы (количество примеров на мини-пакет). Если вы обучаете сеть с помощью данных в мини-пакетном datastore с фоновой включенной отправкой, то можно присвоить загрузку рабочего 0, чтобы использовать того рабочего для выбирающих данных в фоновом режиме. Заданный вектор должен содержать одно значение на рабочего в параллельном пуле.

Если параллельный пул имеет доступ к графическим процессорам, то рабочие без уникального графического процессора никогда не используются для учебного вычисления. Значение по умолчанию для пулов с графическими процессорами должно использовать всех рабочих с уникальным графическим процессором для учебного вычисления и остающихся рабочих для фоновой отправки. Если пул не имеет доступа к графическим процессорам, и центральные процессоры используются для обучения, то значение по умолчанию должно использовать одного рабочего на машину для фоновой отправки данных.

Используйте асинхронную постановку в очередь упреждающей выборки, чтобы считать данные тренировки из хранилищ данных, заданных как false или true. Асинхронная постановка в очередь упреждающей выборки требует Parallel Computing Toolbox.

Определенные входные хранилища данных поддерживают фоновую отправку со средами выполнения мультиграфического процессора или параллелью. Эти хранилища данных: augmentedImageDatastore, pixelLabelImageDatastore, denoisingImageDatastore и randomPatchExtractionDatastore. Другие входные хранилища данных не поддерживают 'parallel' или значения 'multi-gpu' ExecutionEnvironment с DispatchInBackground.

Контрольные точки

свернуть все

Путь для сохранения сетей контрольной точки, заданных как пара, разделенная запятой, состоящая из 'CheckpointPath' и вектора символов.

  • Если вы не задаете путь (то есть, вы используете '' по умолчанию), то программное обеспечение не сохраняет сетей контрольной точки.

  • Если вы задаете путь, то trainNetwork сохраняет сети контрольной точки в этот путь после каждой эпохи и присваивает уникальное имя каждой сети. Можно затем загрузить любую сеть контрольной точки и возобновить обучение от той сети.

    Если папка не существует, то необходимо сначала создать ее прежде, чем задать путь для сохранения сетей контрольной точки. Если путь, который вы задаете, не существует, то trainingOptions возвращает ошибку.

Для получения дополнительной информации о сохранении сетевых контрольных точек, смотрите, Сохраняют Сети Контрольной точки и Обучение Резюме.

Пример: 'CheckpointPath','C:\Temp\checkpoint'

Типы данных: char

Выходные функции, чтобы вызвать во время обучения, заданного как пара, разделенная запятой, состоящая из 'OutputFcn' и указателя на функцию или cell-массива указателей на функцию. trainNetwork вызывает заданные функции однажды запуск обучения после каждой итерации, и однажды после того, как обучение закончилось. trainNetwork передает структуру, содержащую информацию в следующих полях:

Поле Описание
EpochТекущий номер эпохи
IterationТекущий номер итерации
TimeSinceStartВремя в секундах начиная с запуска обучения
TrainingLossТекущая мини-пакетная потеря
ValidationLossПотеря на данных о валидации
BaseLearnRateТекущий основной темп обучения
TrainingAccuracy Точность на текущем мини-пакете (сети классификации)
TrainingRMSERMSE на текущем мини-пакете (сети регрессии)
ValidationAccuracyТочность на данных о валидации (сети классификации)
ValidationRMSERMSE на данных о валидации (сети регрессии)
StateТекущее учебное состояние, с возможным значением "start", "iteration" или "done"

Если поле не вычисляется или не важно для определенного вызова выходных функций, то то поле содержит пустой массив.

Можно использовать выходные функции, чтобы отобразить или построить информацию о прогрессе или остановить обучение. Чтобы остановить обучение рано, заставьте свою выходную функцию возвратить true. Если какая-либо выходная функция возвращает true, то учебные концы и trainNetwork возвращают последнюю сеть. Для примера, показывающего, как использовать выходные функции, смотрите, Настраивают Вывод Во время Обучения Нейронной сети для глубокого обучения.

Типы данных: function_handle | cell

Выходные аргументы

свернуть все

Опции обучения, возвращенные как TrainingOptionsSGDM, TrainingOptionsRMSProp или объект TrainingOptionsADAM. Чтобы обучить нейронную сеть, используйте опции обучения в качестве входного параметра к функции trainNetwork.

Если solverName равняется 'sgdm', 'rmsprop' или 'adam', то опции обучения возвращены как TrainingOptionsSGDM, TrainingOptionsRMSProp или объект TrainingOptionsADAM, соответственно.

Алгоритмы

свернуть все

Начальные веса и смещения

Значением по умолчанию для начальных весов является Распределение Гаусса со средним значением 0 и стандартным отклонением 0,01. Значение по умолчанию для начального значения смещения 0. Можно вручную изменить инициализацию для весов и смещения. Смотрите Задают Начальные Веса и Смещения в Сверточном Слое и Задают Начальные Веса и Смещения в Полносвязном слое.

Стохастический спуск градиента

Стандартный алгоритм спуска градиента обновляет сетевые параметры (веса и смещения), чтобы минимизировать функцию потерь путем делания небольших шагов в каждой итерации в направлении отрицательного градиента потери,

θ+1=θαE(θ),

где номер итерации, α>0 темп обучения, θ вектор параметра, и E(θ) функция потерь. В стандартном алгоритме спуска градиента, градиенте функции потерь, E(θ), оценен с помощью целого набора обучающих данных, и стандартный алгоритм спуска градиента использует целый набор данных целиком.

В отличие от этого, в каждой итерации стохастический алгоритм спуска градиента оценивает градиент и обновляет параметры с помощью подмножества данных тренировки. Различное подмножество, названное мини-пакетом, используется в каждой итерации. Вся передача учебного алгоритма по целому набору обучающих данных с помощью мини-пакетов является одной эпохой. Стохастический спуск градиента является стохастическим, потому что вычисленное использование обновлений параметра мини-пакета является шумной оценкой обновления параметра, которое следовало бы из использования полного набора данных. Можно задать мини-пакетный размер и максимальное количество эпох при помощи аргументов пары "имя-значение" 'MiniBatchSize' и 'MaxEpochs', соответственно.

Стохастический спуск градиента с импульсом

Стохастический алгоритм спуска градиента может колебаться вдоль пути быстрейшего спуска к оптимуму. Добавление срока импульса к обновлению параметра является одним способом уменьшать это колебание [2]. Стохастический спуск градиента с импульсом (SGDM) обновление

θ+1=θαE(θ)+γ(θθ1),

где γ решает, что вклад предыдущего градиента продвигается в текущую итерацию. Можно задать это значение с помощью аргумента пары "имя-значение" 'Momentum'. Чтобы обучить нейронную сеть с помощью стохастического спуска градиента с алгоритмом импульса, задайте solverName как 'sgdm'. Чтобы задать начальное значение темпа обучения α, используйте the'InitialLearnRate' аргумент пары "имя-значение". Можно также задать различные темпы обучения для различных слоев и параметров. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.

RMSProp

Стохастический спуск градиента с импульсом использует один темп обучения для всех параметров. Другие алгоритмы оптимизации стремятся улучшить сетевое обучение при помощи темпов обучения, которые отличаются параметром и могут автоматически адаптироваться к оптимизируемой функции потерь. RMSProp (среднеквадратичное распространение) является одним таким алгоритмом. Это сохраняет скользящее среднее значение поэлементных квадратов градиентов параметра,

v=β2v1+(1β2)[E(θ)]2

β2 является уровнем затухания скользящего среднего значения. Общие ценности уровня затухания 0.9, 0.99, и 0.999. Соответствующие продолжительности усреднения градиентов в квадрате равняются 1/(1-β2), то есть, 10, 100, и 1 000 обновлений параметра, соответственно. Можно задать β2 при помощи аргумента пары "имя-значение" 'SquaredGradientDecayFactor'. Алгоритм RMSProp использует это скользящее среднее значение, чтобы нормировать обновления каждого параметра индивидуально,

θ+1=θαE(θ)v+ϵ

где деление выполняется поэлементное. Используя RMSProp эффективно уменьшает темпы обучения параметров с большими градиентами и увеличивает темпы обучения параметров с маленькими градиентами. ɛ является маленькой константой, добавленной, чтобы избежать деления на нуль. Можно задать ɛ при помощи аргумента пары "имя-значение" 'Epsilon', но значение по умолчанию обычно работает хорошо. Чтобы использовать RMSProp, чтобы обучить нейронную сеть, задайте solverName как 'rmsprop'.

Адам

Адам (выведенный от адаптивной оценки момента) [4] использование обновление параметра, которое подобно RMSProp, но с добавленным сроком импульса. Это сохраняет поэлементное скользящее среднее значение и градиентов параметра и их значений в квадрате,

m=β1m1+(1β1)E(θ)

v=β2v1+(1β2)[E(θ)]2

Можно задать β1 и уровни затухания β2 с помощью аргументов пары "имя-значение" 'GradientDecayFactor' и 'SquaredGradientDecayFactor', соответственно. Адам использует скользящие средние значения, чтобы обновить сетевые параметры как

θ+1=θαmlvl+ϵ

Если градиенты по многим итерациям подобны, то использование скользящего среднего значения градиента позволяет обновлениям параметра взять импульс в определенном направлении. Если градиенты содержат в основном шум, то скользящее среднее значение градиента становится меньшим, и таким образом, обновления параметра становятся меньшими также. Можно задать ɛ при помощи аргумента пары "имя-значение" 'Epsilon'. Значение по умолчанию обычно работает хорошо, но для определенных проблем значение, столь же большое как 1, работает лучше. Чтобы использовать Адама, чтобы обучить нейронную сеть, задайте solverName как 'adam'. Полное обновление Адама также включает механизм, чтобы исправить смещение появляться в начале обучения. Для получения дополнительной информации см. [4].

Задайте темп обучения α для всех алгоритмов оптимизации с помощью the'InitialLearnRate' аргумент пары "имя-значение". Эффект темпа обучения отличается для различных алгоритмов оптимизации, таким образом, оптимальные темпы обучения также отличаются в целом. Можно также задать темпы обучения, которые отличаются слоями и параметром. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.

Усечение градиента

Если увеличение градиентов значения экспоненциально, то обучение нестабильно и может отличаться в нескольких итерациях. Этот "взрыв градиента" обозначается учебной потерей, которая переходит к NaN или Inf. Усечение градиента помогает предотвратить взрыв градиента путем стабилизации обучения на уровнях высшего образования и в присутствии выбросов [3]. Усечение градиента позволяет сетям быть обученными быстрее и обычно не влияет на точность изученной задачи.

Существует два типа усечения градиента.

  • Основанное на норме усечение градиента повторно масштабирует градиент на основе порога и не изменяет направление градиента. 'l2norm' и значения 'global-l2norm' GradientThresholdMethod являются основанными на норме методами усечения градиента.

  • Основанное на значении усечение градиента отсекает любую частную производную, больше, чем порог, который может привести к градиенту, произвольно изменяющему направление. Основанное на значении усечение градиента может иметь непредсказуемое поведение, но достаточно небольшие изменения не заставляют сеть отличаться. Значение 'absolute-value' GradientThresholdMethod является основанным на значении методом усечения градиента.

Для примеров смотрите, что Временные ряды Предсказывают Используя Классификацию Глубокого обучения и От последовательности к последовательности Используя Глубокое обучение.

Регуляризация L2

Добавление регуляризации называет для весов к функции потерь E(θ) один путь состоит в том, чтобы уменьшать сверхподбор кривой [1], [2]. Срок регуляризации также называется затуханием веса. Функция потерь со сроком регуляризации принимает форму

ER(θ)=E(θ)+λΩ(w),

где w вектор веса, λ фактор регуляризации (коэффициент) и функция регуляризации Ω(w)

Ω(w)=12wTw.

Обратите внимание на то, что смещения не упорядочены [2]. Можно задать фактор регуляризации λ при помощи аргумента пары "имя-значение" 'L2Regularization'. Можно также задать различные факторы регуляризации для различных слоев и параметров. Для получения дополнительной информации смотрите Настроенные Параметры в Сверточном и Полносвязных слоях.

Функция потерь, что использование программного обеспечения для сетевого обучения включает срок регуляризации. Однако значение потерь, отображенное в командном окне и учебном графике прогресса во время обучения, является потерей на данных только и не включает срок регуляризации.

Вопросы совместимости

развернуть все

Поведение изменяется в R2018b

Поведение изменяется в R2018b

Ссылки

[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).

Введенный в R2016a

Для просмотра документации необходимо авторизоваться на сайте