Советы и рекомендации по глубокому обучению

На этой странице описаны различные опции обучения и методы повышения точности нейронных сетей для глубокого обучения.

Выбор сетевой архитектуры

Соответствующая сетевая архитектура зависит от задачи и доступных данных. Примите во внимание эти предложения при принятии решения о том, какую архитектуру использовать и использовать ли предварительно обученную сеть или обучать с нуля.

ДанныеОписание задачиПодробнее
ИзображенияКлассификация природных изображений

Попробуйте различные предварительно обученные сети. Список предварительно обученных нейронных сетей для глубокого обучения см. в разделе «Предварительно обученные Глубокие нейронные сети».

Чтобы узнать, как интерактивно подготовить сеть к передаче обучения с помощью Deep Network Designer, смотрите Передача Обучения with Deep Network Designer.

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

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

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

Семантическая сегментацияComputer Vision Toolbox™ предоставляет инструменты для создания нейронных сетей для глубокого обучения семантической сегментации. Для получения дополнительной информации смотрите Начало работы с семантической сегментацией с использованием глубокого обучения (Computer Vision Toolbox).
Последовательности, временные ряды и сигналыКлассификация от последовательности до меткиДля получения примера смотрите Классификацию последовательностей с использованием глубокого обучения.
Классификация и регрессия между последовательностямиЧтобы узнать больше, смотрите Классификацию последовательностей в последовательностях с использованием глубокого обучения и регрессию последовательностей в последовательности с использованием глубокого обучения.
Прогнозирование временных рядовДля получения примера смотрите Прогнозирование временных рядов с использованием глубокого обучения.
ТекстКлассификация и регрессияText Analytics Toolbox™ предоставляет инструменты для создания нейронных сетей для глубокого обучения для текстовых данных. Для получения примера смотрите Классификация текстовых данных с помощью глубокого обучения.
Генерация текстаДля получения примера смотрите Сгенерировать текст Используя Глубокое Обучение.
АудиоКлассификация и регрессия звукаДля получения примера см. Распознание речевых команд с использованием глубокого обучения.

Выбор опций обучения

trainingOptions функция предоставляет различные опции для обучения глубокой нейронной сети для глубокого обучения.

СоветДополнительная информация
Отслеживайте процесс обученияЧтобы включить график процесса обучения, установите 'Plots' опция в trainingOptions на 'training-progress'.
Используйте данные валидации

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

Примечание

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

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

Задайте коэффициенты более высокой скорости обучения для новых слоев, используя, например, WeightLearnRateFactor свойство convolution2dLayer.

Уменьшите начальную скорость обучения, используя 'InitialLearnRate' опция trainingOptions.

При передаче обучения вам не нужно тренироваться на столько эпох. Уменьшите количество эпох, использующих 'MaxEpochs' опция в trainingOptions.

Чтобы узнать, как интерактивно подготовить сеть к передаче обучения с помощью Deep Network Designer, смотрите Передача Обучения with Deep Network Designer.

Тасуйте свои данные каждую эпоху

Чтобы перетасовать свои данные каждую эпоху (один полный проход данных), установите 'Shuffle' опция в trainingOptions на 'every-epoch'.

Примечание

Для данных последовательности тасование может оказать негативное влияние на точность, так как это может увеличить количество заполнения или усеченных данных. Если у вас есть данные последовательности, то сортировка данных по длине последовательности может помочь. Для получения дополнительной информации см. Раздел «Заполнение последовательности», «Усечение» и «Разделение».

Попробуйте различные оптимизаторы

Чтобы задать различные оптимизаторы, используйте solverName аргумент в trainingOptions.

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

Повышение точности обучения

Если вы заметили проблемы во время обучения, то рассмотрим эти возможные решения.

ПроблемаВозможное решение
NaNs или большие всплески потерь

Уменьшите начальную скорость обучения, используя 'InitialLearnRate' опция trainingOptions.

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

Потеря все еще уменьшается в конце обученияОбучайте дольше, увеличивая количество эпох, используя 'MaxEpochs' опция в trainingOptions.
Плато потерь

Если плато потерь при неожиданно высоком значении, то сбросьте скорость обучения на плато. Чтобы изменить расписание скорости обучения, используйте 'LearnRateSchedule' опция в trainingOptions.

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

Потеря валидации намного выше, чем потеря обучения

Чтобы предотвратить сверхподбор кривой, попробуйте одно или несколько из следующих:

Потеря уменьшается очень медленно

Увеличьте начальную скорость обучения, используя 'InitialLearnRate' опция trainingOptions.

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

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

Исправление ошибок в обучении

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

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

Попробуйте уменьшить размер мини-пакета, используя 'MiniBatchSize' опция trainingOptions.

Если уменьшение размера мини-пакета не работает, попробуйте использовать меньшую сеть, уменьшив количество слоев, или уменьшив количество параметров или фильтров в слоях.

Пользовательские ошибки слояМожет возникнуть проблема с реализацией пользовательского слоя.

Проверьте валидность пользовательского слоя и найдите потенциальные проблемы с помощью checkLayer.

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

Обучение выдает ошибку 'CUDA_ERROR_UNKNOWN'Иногда графический процессор выдает эту ошибку, когда она используется как для запросов на вычисление, так и для запросов на отображение от ОС.

Попробуйте уменьшить размер мини-пакета, используя 'MiniBatchSize' опция trainingOptions.

Если уменьшение размера мини-пакета не работает, то в Windows®, попробуйте настроить параметры Timeout Detection and Recovery (TDR). Для примера измените TdrDelay от 2 секунд (по умолчанию) до 4 секунд (требует редактирования реестра).

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

Подготовка и предварительная обработка данных

Вы можете улучшить точность, предварительно обработав свои данные.

Классы веса или баланса

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

Для задач классификации можно задать веса классов с помощью 'ClassWeights' опция classificationLayer. Для семантических задач сегментации можно задать веса классов с помощью ClassWeights (Computer Vision Toolbox) свойства pixelClassificationLayer (Computer Vision Toolbox).

Также можно сбалансировать классы, выполнив одно или несколько из следующих действий:

  • Добавьте новые наблюдения из наименее частых классов.

  • Удалите наблюдения из наиболее частых классов.

  • Группируйте похожие классы. Например, сгруппировать классы «автомобиль» и «грузовик» в единый класс « транспортное средство».

Предварительная обработка данных изображения

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

ЗадачаДополнительная информация
Изменение размера изображений

Чтобы использовать предварительно обученную сеть, необходимо изменить размер изображений на размер входа сети. Чтобы изменить размер изображений, используйте augmentedImageDatastore. Для примера этот синтаксис изменяет размер изображений в хранилище данных изображений imds:

auimds = augmentedImageDatastore(inputSize,imds);

Совет

Использовать augmentedImageDatastore для эффективной предварительной обработки изображений для глубокого обучения, включая изменение размера изображений.

Не используйте readFcn опция imageDatastore для предварительной обработки или изменения размера, поскольку эта опция обычно значительно медленнее.

Увеличение изображения

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

Нормализуйте регрессионые цели

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

Для получения дополнительной информации см. «Train сверточной нейронной сети для регрессии».

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

Для получения дополнительной информации о работе с сетями LSTM, смотрите Длинные Краткосрочные Сети Памяти.

ЗадачаДополнительная информация
Нормализуйте данные последовательности

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

Дополнительные сведения см. в разделе «Нормализация данных последовательности».

Уменьшите заполнение и усечение последовательности

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

Для получения дополнительной информации см. Раздел «Заполнение последовательности», «Усечение» и «Разделение».

Задайте размер мини-пакета и опции заполнения для предсказания

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

Чтобы задать размер мини-пакета и опции заполнения, используйте 'MiniBatchSize' и 'SequenceLength' опции classify, predict, classifyAndUpdateState, и predictAndUpdateState функций.

Использование доступного оборудования

Чтобы задать окружение выполнения, используйте 'ExecutionEnvironment' опция в trainingOptions.

ПроблемаДополнительная информация
Обучение на центральном процессоре идет медленноЕсли обучение слишком медленно на одном центральном процессоре, попробуйте использовать предварительно обученную нейронную сеть для глубокого обучения в качестве экстрактора функций и обучите модель машинного обучения. Для получения примера смотрите Извлечение изображения Функций с использованием предварительно обученной сети.
Обучение LSTM на графическом процессоре происходит медленно

Центральный процессор лучше подходит для настройки сети LSTM с использованием мини-пакетов с короткими последовательностями. Чтобы использовать центральный процессор, установите 'ExecutionEnvironment' опция в trainingOptions на 'cpu'.

Программное обеспечение не использует все доступные графические процессорыЕсли у вас есть доступ к машине с несколькими графическими процессорами, просто установите 'ExecutionEnvironment' опция в trainingOptions на 'multi-gpu'. Для получения дополнительной информации смотрите Глубокое Обучение на нескольких графических процессорах.

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

Исправление ошибок с загрузкой из MAT-файлов

Если вы не можете загрузить слои или сеть из MAT-файла и получите предупреждение о форме

Warning: Unable to load instances of class layerType into a 
heterogeneous array.  The definition of layerType could be
missing or contain an error.  Default objects will be
substituted. 
Warning: While loading an object of class 'SeriesNetwork':
Error using 'forward' in Layer nnet.cnn.layer.MissingLayer. The
function threw an error and could not be executed. 
тогда сеть в MAT-файле может содержать недоступные слои. Это может быть вызвано следующими факторами:

  • Файл содержит пользовательский слой не в пути - Чтобы загрузить сети, содержащие пользовательские слои, добавьте пользовательские файлы слоя в MATLAB® путь.

  • Файл содержит пользовательский слой из пакета поддержки - Чтобы загрузить сети с помощью слоев из пакетов поддержки, установите необходимый пакет поддержки в командной строке при помощи соответствующей функции (для примера, resnet18) или с помощью Add-On Explorer.

  • Файл содержит пользовательский слой из примера документации, которого нет в пути - Чтобы загрузить сети, содержащие пользовательские слои из примеров документации, откройте пример как Live Script и скопируйте слой из папки примера в вашу рабочую директорию.

  • Файл содержит слой из не установленного тулбокса - Для доступа к слоям из других тулбоксов, например, Computer Vision Toolbox или Symbolic Math Toolbox, установите соответствующий тулбокс.

Попробовав предложенные решения, перезагрузите MAT-файл.

См. также

| | |

Похожие темы