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

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

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

Извлеките данные

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

unzip("MerchData.zip");

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

Открытый Deep Network Designer.

deepNetworkDesigner

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

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

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

Импортируйте данные

Чтобы загрузить данные в Deep Network Designer, на вкладке Data, нажимают Import Data. Диалоговое окно Import Data открывается.

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

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

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

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

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

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

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

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

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

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

Обучение сети

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

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

Чтобы обучить сеть с заданными опциями обучения, нажмите Close и затем нажмите Train.

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

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

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

Можно также сгенерировать код MATLAB, который воссоздает сеть и используемые опции обучения. На вкладке Training выберите Export> Generate Code for Training. Исследуйте код 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] Krizhevsky, Алекс, Илья Сутскевер и Джеффри Э. Хинтон. "Классификация ImageNet с Глубокими Сверточными нейронными сетями". Усовершенствования в нейронных системах обработки информации. 2012.

[2] Модель BVLC AlexNet. https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet

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

| | |

Похожие темы