Советы глубокого обучения и приемы

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

Выберите Network Architecture

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

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

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

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

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

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

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

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

Выберите Training Options

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

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

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

Примечание

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

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

Задайте факторы уровня высшего образования для новых слоев при помощи, например, WeightLearnRateFactor свойство convolution2dLayer.

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

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

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

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

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

Примечание

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

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

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

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

Улучшите учебную точность

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

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

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

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

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

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

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

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

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

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

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

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

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

Зафиксируйте ошибки в обучении

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

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

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

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

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

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

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

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

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

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

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

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

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

Вес или классы баланса

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

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

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

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

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

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

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

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

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

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

auimds = augmentedImageDatastore(inputSize,imds);

Совет

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

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

Отобразите увеличение

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

Нормируйте цели регрессии

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

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

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

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

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

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

Чтобы узнать больше, смотрите, Нормируют Данные о Последовательности.

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

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

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

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

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

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

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

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

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

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

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

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

Зафиксируйте ошибки с загрузкой из 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® path.

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

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

  • Файл содержит слой от тулбокса, который не установлен – К слоям доступа от других тулбоксов, например, Computer Vision Toolbox или Text Analytics Toolbox, установите соответствующий тулбокс.

После попытки предложенных решений перезагрузите MAT-файл.

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

| | |

Похожие темы