В этом примере показано, как использовать Deep Network Designer для адаптации предварительно обученной сети GoogLeNet для классификации нового набора изображений. Этот процесс называется передачей обучения и обычно намного быстрее и проще, чем обучение новой сети, потому что можно применить выученные функции к новой задаче с помощью меньшего количества обучающих изображений. Чтобы подготовить сеть к интерактивной передаче обучения, используйте Deep Network Designer.
В рабочей области разархивируйте данные.
unzip('MerchData.zip');
Откройте Deep Network Designer.
deepNetworkDesigner
Загрузите предварительно обученную сеть GoogLeNet, выбрав ее на начальной странице Deep Network Designer. Если необходимо загрузить сеть, нажмите кнопку Установить, чтобы открыть Add-On Explorer.
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.
Используя Deep Network Designer, можно визуально просмотреть распределение данных обучения и валидации на вкладке Данные. Можно увидеть, что в этом примере в наборе данных пять классов. Можно также просмотреть случайные наблюдения от каждого класса.
Deep Network Designer изменяет размер изображений во время обучения, чтобы соответствовать размеру входа сети. Чтобы просмотреть размер входа сети, на вкладке Designer, нажмите imageInputLayer
. Эта сеть имеет размер входа 224 на 224.
Чтобы переобучить предварительно обученную сеть для классификации новых изображений, замените последний усвояемый слой и конечный слой классификации новыми слоями, адаптированными к новому набору данных. В GoogLeNet эти слои имеют имена 'loss3-classifier'
и 'output'
, соответственно.
На вкладке Designer перетащите мышью новую fullyConnectedLayer
из библиотеки слоев на холст. Задайте OutputSize
к количеству классов в новых данных, в этом примере, 5
.
Редактируйте скорости обучения, чтобы учиться быстрее в новых слоях, чем в переданных слоях. Задайте WeightLearnRateFactor
и BiasLearnRateFactor
на 10
. Удалите последний полностью подключенный слой и соедините новый слой.
Замените слой выхода. Прокрутка до конца библиотеки слоев и перетаскивание нового classificationLayer
на холст. Удалите исходный output
слой и соедините ваш новый слой вместо этого.
Проверьте сеть нажав Анализировать. Сеть готова к обучению, если Нейронная Сеть для Глубокого Обучения Analyzer сообщает о нулевых ошибках.
Чтобы обучить сеть настройкам по умолчанию, на вкладке Обучение, нажмите Обучить.
Если требуется усилить контроль над обучением, щелкните Опции обучения и выберите параметры для обучения. Опции обучения по умолчанию лучше подходят для больших наборов данных. Для небольших наборов данных используйте меньшие значения для размера мини-пакета и частоты валидации. Для получения дополнительной информации о выборе опций обучения смотрите trainingOptions
.
В данном примере установите InitialLearnRate на 0.0001
, ValidationFrequency для 5
, и MaxEpochs, чтобы 8
. Поскольку наблюдений 55, установите значение MiniBatchSize 11
чтобы разделить обучающие данные равномерно и убедиться, что весь набор обучающих данных используется в каждую эпоху.
Чтобы обучить сеть с заданными опциями обучения, нажмите кнопку Закрыть и затем щелкните Обучить.
Deep Network Designer позволяет вам визуализировать и контролировать процесс обучения. Затем можно отредактировать опции обучения и при необходимости переобучить сеть.
Чтобы экспортировать результаты из обучения, на вкладке Обучение выберите Экспорт > Экспорт обученной сети и результатов. Deep Network Designer экспортирует обученную сеть как переменную trainedNetwork_1
и обучающую информацию как переменную trainInfoStruct_1
.
Можно также сгенерировать код MATLAB, который воссоздает сеть и используемые опции обучения. На вкладке Обучение выберите Экспорт > Сгенерировать код для обучения.
Выберите новое изображение для классификации с помощью обученной сети.
I = imread("MerchDataTest.jpg");
Измените размер тестового изображения, чтобы он совпадал с размером входа сети.
I = imresize(I, [224 224]);
Классификация тестового изображения с помощью обученной сети.
[YPred,probs] = classify(trainedNetwork_1,I); imshow(I) label = YPred; title(string(label) + ", " + num2str(100*max(probs),3) + "%");
Для получения дополнительной информации, в том числе о других предварительно обученных сетях, смотрите Deep Network Designer.