Настройте параметры и обучите сверточную нейронную сеть

После того, как вы задаете слои своей нейронной сети как описано в, Задают Слои Сверточной нейронной сети, следующий шаг должен настроить опции обучения для сети. Используйте trainingOptions функция, чтобы задать глобальные параметры обучения. Чтобы обучить сеть, используйте объект, возвращенный trainingOptions как входной параметр к trainNetwork функция. Например:

options = trainingOptions('adam');
trainedNet = trainNetwork(data,layers,options);

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

Задайте решатель и максимальное количество эпох

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

'adam' (выведенный из адаптивной оценки момента), решатель часто является хорошим оптимизатором, чтобы попробовать сначала. Можно также попробовать 'rmsprop' (среднеквадратичное распространение) и 'sgdm' (стохастический градиентный спуск с импульсом) оптимизаторы и видят, улучшает ли это обучение. Другие решатели работают лучше на различные проблемы. Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.

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

По умолчанию программное обеспечение переставляет данные однажды обучение. Можно изменить эти настройки при помощи 'Shuffle' аргумент пары "имя-значение".

Задайте и измените скорость обучения

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

Совет

Если мини-пакетная потеря во время обучения когда-нибудь становится NaN, затем скорость обучения, вероятно, слишком высока. Попытайтесь уменьшать скорость обучения, например, на коэффициент 3, и перезапустить сетевое обучение.

Чтобы постепенно уменьшать скорость обучения, используйте 'LearnRateSchedule','piecewise' аргумент пары "имя-значение". Если вы выбираете эту опцию, trainNetwork умножает начальную скорость обучения на коэффициент 0,1 каждых 10 эпох. Можно задать фактор, которым можно уменьшать начальную скорость обучения и номер эпох при помощи 'LearnRateDropFactor' и 'LearnRateDropPeriod' аргументы пары "имя-значение", соответственно.

Задайте данные о валидации

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

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

Чтобы уменьшать сверхподбор кривой, можно попытаться добавить увеличение данных. Используйте augmentedImageDatastore выполнять случайные преобразования на ваших входных изображениях. Это помогает препятствовать тому, чтобы сеть запомнила точное положение и ориентацию объектов. Можно также попытаться увеличить регуляризацию L2 с помощью 'L2Regularization' аргумент пары "имя-значение", с помощью слоев нормализации партии. после сверточных слоев, и добавляя слои уволенного.

Выберите Hardware Resource

Если графический процессор доступен, то trainNetwork использование это для обучения, по умолчанию. В противном случае, trainNetwork использует центральный процессор. В качестве альтернативы можно задать среду выполнения, вы хотите использовать 'ExecutionEnvironment' аргумент пары "имя-значение". Можно задать один центральный процессор ('cpu'), один графический процессор ('gpu'), несколько графических процессоров ('multi-gpu'), или локальный параллельный пул или вычисляет кластер ('parallel'). Все опции кроме 'cpu' потребуйте Parallel Computing Toolbox™. Обучение на графическом процессоре требует поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).

Сохраните сети контрольной точки и возобновите обучение

Deep Learning Toolbox™ позволяет вам сохранить сети как .mat файлы после каждой эпохи во время обучения. Это периодическое сохранение особенно полезно, когда у вас есть большая сеть или большой набор данных, и обучение занимает много времени. Если обучение прервано по некоторым причинам, можно возобновить обучение от последней сохраненной сети контрольной точки. Если вы хотите trainNetwork чтобы сохранить сети контрольной точки, затем необходимо задать имя пути при помощи 'CheckpointPath' аргумент пары "имя-значение" trainingOptions. Если путь, который вы задаете, не существует, то trainingOptions возвращает ошибку.

trainNetwork автоматически уникальные имена присвоений, чтобы отметить сетевые файлы контрольной точкой. На имя в качестве примера, net_checkpoint__351__2018_04_12__18_09_52.mat, 351 номер итерации, 2018_04_12 дата и 18_09_52 время в который trainNetwork сохраняет сеть. Можно загрузить сетевой файл контрольной точки путем двойного клика по нему или использования команды загрузки в командной строке. Например:

load net_checkpoint__351__2018_04_12__18_09_52.mat
Можно затем возобновить обучение при помощи слоев сети как входной параметр к trainNetwork. Например:

trainNetwork(XTrain,YTrain,net.Layers,options)
Необходимо вручную задать опции обучения и входные данные, потому что сеть контрольной точки не содержит эту информацию. Для примера смотрите Обучение Резюме от Сети Контрольной точки.

Настройте параметры в сверточном и полносвязных слоях

Можно установить параметры изучения, чтобы отличаться от глобальных значений, заданных trainingOptions в слоях с настраиваемыми параметрами, такой как сверточный и полносвязные слоя. Например, чтобы настроить скорость обучения для смещений или весов, можно задать значение для BiasLearnRateFactor или WeightLearnRateFactor свойства слоя, соответственно. trainNetwork функция умножает скорость обучения, при помощи которой вы задаете trainingOptions с этими факторами. Точно так же можно также задать факторы регуляризации L2 для весов и смещений в этих слоях путем определения BiasL2Factor и WeightL2Factor свойства, соответственно. trainNetwork затем умножает факторы регуляризации L2, при помощи которых вы задаете trainingOptions с этими факторами.

Инициализируйте веса в сверточном и полносвязных слоях

Веса слоя являются настраиваемыми параметрами. Можно задать начальное значение для весов непосредственно с помощью Weights свойство слоя. Когда вы обучаете сеть, если Weights свойство слоя непусто, затем trainNetwork использует Weights свойство как начальное значение. Если Weights свойство пусто, затем trainNetwork использует инициализатор, заданный WeightsInitializer свойство слоя.

Обучите свою сеть

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

layers = [imageInputLayer([28 28 1])
          convolution2dLayer(5,20)
          reluLayer
          maxPooling2dLayer(2,'Stride',2)
          fullyConnectedLayer(10)
          softmaxLayer
          classificationLayer];
options = trainingOptions('adam');
convnet = trainNetwork(data,layers,options);

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

Смотрите также

| | |

Похожие темы