exponenta event banner

Перенести обучение с помощью разработчика Deep Network Designer

В этом примере показано, как выполнять обучение переносу в интерактивном режиме с помощью приложения Deep Network Designer.

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

Используйте Deep Network Designer для выполнения обучения передаче для классификации изображений, выполнив следующие действия:

  1. Откройте приложение Deep Network Designer и выберите предварительно подготовленную сеть.

  2. Импортируйте новый набор данных.

  3. Замените конечные слои новыми слоями, адаптированными к новому набору данных.

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

  5. Обучение сети с помощью Deep Network Designer или экспорт сети для обучения в командной строке.

Извлечь данные

В рабочей области извлеките набор данных MathWorks Merch. Это небольшой набор данных, содержащий 75 изображений товаров MathWorks, принадлежащих пяти различным классам (колпачок, куб, игральные карты, отвертка и факел).

unzip("MerchData.zip");

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

Чтобы открыть Deep Network Designer, на вкладке Приложения в разделе Машинное обучение и Глубокое обучение щелкните значок приложения. Можно также открыть приложение из командной строки:

deepNetworkDesigner

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

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

SqueeeNet не требует дополнительного пакета поддержки. Для других предварительно подготовленных сетей, если не установлен необходимый пакет поддержки, приложение предоставляет параметр Установить.

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

Обзор сети

Deep Network Designer отображает увеличенное представление всей сети на панели Конструктор.

Изучите график сети. Чтобы увеличить изображение с помощью мыши, используйте клавиши Ctrl + колесо прокрутки. Для панорамирования используйте клавиши со стрелками или удерживайте колесо прокрутки и перетащите мышь. Выберите слой для просмотра его свойств. Отмените выбор всех слоев для просмотра сводки сети на панели «Свойства».

Импорт данных

Чтобы загрузить данные в Deep Network Designer, на вкладке Данные щелкните Импорт данных > Импорт данных изображения. Откроется диалоговое окно Импорт данных изображения (Import Image Data).

В списке Источник данных выберите Папка. Нажмите кнопку Обзор и выберите извлеченную папку MerchData.

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

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

  • Случайное отражение по оси X

  • Случайное отражение по оси y

  • Случайное вращение

  • Случайное масштабирование

  • Случайный горизонтальный перевод

  • Случайный вертикальный перевод

Можно эффективно увеличить объем обучающих данных, применяя рандомизированное увеличение к данным. Увеличение также позволяет обучать сети быть инвариантными к искажениям в данных изображения. Например, можно добавить рандомизированные повороты к входным изображениям, чтобы сеть была инвариантна наличию поворота во входных изображениях.

В этом примере применяется случайное отражение по оси X, случайное вращение из диапазона [-90, 90] градусов и случайное масштабирование из диапазона [1,2].

Данные проверки

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

Для этого примера используйте 30% изображений для проверки.

Нажмите кнопку Импорт, чтобы импортировать данные в Deep Network Designer.

Визуализация данных

С помощью Deep Network Designer можно визуально проверить распределение данных обучения и проверки на закладке Данные. В этом примере в наборе данных имеется пять классов. Вы также можете видеть случайные наблюдения из каждого класса.

Подготовка сети к обучению

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

Заменить последний обучаемый слой

Чтобы использовать предварительно подготовленную сеть для обучения передаче, необходимо изменить количество классов в соответствии с новым набором данных. Сначала найдите последний обучаемый уровень в сети. Для SqueeExnet последним обучаемым уровнем является последний сверточный уровень, 'conv10'. В этом случае замените сверточный слой новым сверточным слоем с количеством фильтров, равным числу классов.

Перетаскивание нового convolution2dLayer на холст. Для соответствия исходному сверточному слою установите FilterSize кому 1,1.

NumFilters свойство определяет количество классов для проблем классификации. Изменение NumFilters к числу классов в новых данных, в этом примере: 5.

Изменение скорости обучения таким образом, чтобы обучение происходило быстрее в новом слое, чем в перенесенных слоях, путем установки WeightLearnRateFactor и BiasLearnRateFactor кому 10.

Удалите последний сверточный слой 2-D и подключите новый слой.

Заменить выходной слой

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

Для нового выходного слоя не требуется устанавливать OutputSize. Во время обучения Deep Network Designer автоматически устанавливает классы вывода уровня из данных.

Проверить сеть

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

Железнодорожная сеть

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

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

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

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

  • Укажите частоту проверки, чтобы точность данных проверки вычислялась один раз в каждую эпоху.

  • Укажите небольшое число эпох. Эпоха - это полный цикл обучения по всему набору данных обучения. Для трансферного обучения не нужно тренироваться на столько же эпох.

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

В этом примере задайте InitiveLearnRate равным 0.0001, ValidationFrequency to 5и MaxEpochs to 8. Поскольку существует 55 наблюдений, установите MiniBatchSize в значение 11 для равномерного разделения данных обучения и обеспечения использования всего набора данных обучения в течение каждой эпохи. Дополнительные сведения о выборе параметров обучения см. в разделе trainingOptions.

Чтобы обучить сеть с указанными параметрами обучения, нажмите кнопку Закрыть, а затем нажмите кнопку Обучить.

Deep Network Designer позволяет визуализировать и контролировать ход обучения. Затем можно отредактировать варианты обучения и при необходимости переобучить сеть.

Экспорт результатов и создание кода MATLAB

Чтобы экспортировать сетевую архитектуру с обученными весами, на вкладке Обучение выберите Экспорт > Экспорт обученных сетей и результатов. Deep Network Designer экспортирует обученную сеть в качестве переменной trainedNetwork_1 и информация об обучении в качестве переменной trainInfoStruct_1.

trainInfoStruct_1
trainInfoStruct_1 = struct with fields:
               TrainingLoss: [1×40 double]
           TrainingAccuracy: [1×40 double]
             ValidationLoss: [4.3374 NaN NaN NaN 2.4329 NaN NaN NaN NaN 1.3966 NaN NaN NaN NaN 0.7526 NaN NaN NaN NaN 0.6424 NaN NaN NaN NaN 0.6349 NaN NaN NaN NaN 0.5940 NaN NaN NaN NaN 0.5490 NaN NaN NaN NaN 0.5179]
         ValidationAccuracy: [10 NaN NaN NaN 15 NaN NaN NaN NaN 40 NaN NaN NaN NaN 70 NaN NaN NaN NaN 85 NaN NaN NaN NaN 90 NaN NaN NaN NaN 85 NaN NaN NaN NaN 90 NaN NaN NaN NaN 95]
              BaseLearnRate: [1×40 double]
        FinalValidationLoss: 0.5179
    FinalValidationAccuracy: 95

Также можно создать код MATLAB, который воссоздает сеть и используемые параметры обучения. На вкладке Обучение выберите Экспорт > Создать код для обучения. Изучите код MATLAB, чтобы узнать, как программно подготовить данные для обучения, создать архитектуру сети и обучить сеть.

Классифицировать новое изображение

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

I = imread("MerchDataTest.jpg");

Deep Network Designer изменяет размер изображений во время обучения в соответствии с размером сетевого ввода. Чтобы просмотреть размер сетевого ввода, перейдите на панель Конструктор и выберите imageInputLayer (первый слой). Эта сеть имеет входной размер 227 на 227.

Измените размер тестового образа в соответствии с размером сетевого входа.

I = imresize(I, [227 227]);

Классифицируйте тестовый образ с помощью обученной сети.

[YPred,probs] = classify(trainedNetwork_1,I);
imshow(I)
label = YPred;
title(string(label) + ", " + num2str(100*max(probs),3) + "%");

См. также

Связанные темы