Запуск с передачей обучения

Этот пример показывает, как использовать передачу обучения для переобучения SqueezeNet, предварительно обученной сверточной нейронной сети, чтобы классифицировать новый набор изображений. Попробуйте этот пример, чтобы увидеть, насколько просто начать глубокое обучение в MATLAB ®.

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

Извлечение данных

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

unzip("MerchData.zip");

Загрузка предварительно обученной сети

Откройте Deep Network Designer.

deepNetworkDesigner

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

Deep Network Designer отображает представление масштабирования всей сети.

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

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

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

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

Разделите данные на 70% обучающих данных и 30% валидационных данных.

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

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

Редактирование сети для передачи обучения

Чтобы переобучить SqueezeNet для классификации новых изображений, замените последний 2-D сверточный слой и конечный классификационный слой сети. В SqueezeNet эти слои имеют имена 'conv10' и 'ClassificationLayer_predictions', соответственно.

На панели Designer перетащите мышью новую convolution2dLayer на холст. Чтобы соответствовать исходному сверточному слою, задайте FilterSize на 1,1. Редактирование NumFilters количество классов в новых данных, в данном примере 5.

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

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

Замените слой выхода. Прокрутка до конца библиотеки слоев и перетаскивание нового classificationLayer на холст. Удалите исходный выходной слой и соедините ваш новый слой вместо него.

Обучите сеть

Чтобы выбрать опции обучения, перейдите на вкладку Обучение и нажмите Опции обучения. Установите начальную скорость обучения на небольшое значение, чтобы замедлить обучение в перенесенных слоях. На предыдущем шаге вы увеличили коэффициенты скорости обучения для 2-D сверточного слоя, чтобы ускорить обучение в новых конечных слоях. Эта комбинация настроек скорости обучения приводит к быстрому обучению только в новых слоях и более медленному обучению в других слоях.

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

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

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

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

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

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

Классификация нового изображения

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

I = imread("MerchDataTest.jpg");

Измените размер тестового изображения, чтобы он совпадал с размером входа сети.

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

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

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

Ссылки

[1] ImageNet. http://www.image-net.org

[2] Iandola, Forrest N., Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, and Kurt Keutzer. SqueezeNet: точность уровня AlexNet с 50-кратным меньшим количеством параметров и размером модели < 0,5 МБ ". Препринт, представленный 4 ноября 2016 года. https://arxiv.org/abs/1602.07360 .

[3] Иандола, Форрест Н. «SqueezeNet». https://github.com/forresti/SqueezeNet.

См. также

| | |

Похожие темы