exponenta event banner

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

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

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

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

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

unzip("MerchData.zip");

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

Откройте конструктор глубоких сетей.

deepNetworkDesigner

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

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

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

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

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

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

Разделите данные на 70% данных обучения и 30% данных проверки.

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

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

Изменить сеть для трансферного обучения

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

На панели «Конструктор» перетащите новый convolution2dLayer на холст. Для соответствия исходному сверточному слою установите FilterSize кому 1,1. Править NumFilters количество классов в новых данных, в этом примере: 5.

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

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

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

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

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

В этом примере задайте InitiveLearnRate равным 0.0001, ValidationFrequency to 5, MaxEpochs to 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] Иандола, Форрест Н., Сон Хан, Мэтью У. Москевич, Халид Ашраф, Уильям Дж. Далли и Курт Кейцер. «Точность на уровне SqueeNet: AlexNet с 50-кратным уменьшением параметров и размером модели < 0,5 МБ». Препринт, представлен 4 ноября 2016 года. https://arxiv.org/abs/1602.07360 .

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

См. также

| | |

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