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

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

Выберите 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, включают пропавших без вести или отключенные слои, которым не соответствуют или неправильные размеры входных параметров слоя, неправильное количество входных параметров слоя и недопустимые структуры графика.

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы использовать предварительно обученную сеть, необходимо изменить размер изображений к входному размеру сети. Чтобы изменить размер изображений, используйте 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'. Для получения дополнительной информации смотрите Глубокое обучение на Нескольких графических процессорах.

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

Зафиксируйте ошибки с загрузкой из 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 или Text Analytics Toolbox, установите соответствующий тулбокс.

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

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

| | |

Похожие темы