В этом примере показано, как использовать Deep Network Designer, чтобы адаптировать предварительно обученную сеть GoogLeNet, чтобы классифицировать новый набор изображений. Этот процесс называется передачей обучения и обычно намного быстрее и легче, чем обучение новой сети, потому что можно применить изученные функции к новой задаче с помощью меньшего числа учебных изображений. Чтобы подготовить сеть к передаче обучения в интерактивном режиме, используйте Deep Network Designer.
В рабочей области разархивируйте данные.
unzip('MerchData.zip');
Открытый Deep Network Designer.
deepNetworkDesigner
Загрузите предварительно обученную сеть GoogLeNet путем выбора его из начальной страницы Deep Network Designer. Если необходимо загрузить сеть, то нажмите Install, чтобы открыть Add-On Explorer.
Deep Network Designer отображает уменьшивший масштаб представление целой сети. Исследуйте сетевой график. Чтобы увеличить масштаб с мышью, используйте колесо Ctrl+scroll.
Чтобы загрузить данные в Deep Network Designer, на вкладке Data, нажимают Import Data> Import Image Data. Диалоговое окно Import Image Data открывается.
В списке Источников данных выберите Folder. Нажмите Browse и выберите извлеченную папку MerchData.
Диалоговое окно также позволяет вам разделять данные о валидации из приложения. Разделите данные на 70% обучающих данных и 30%-х данных о валидации.
Задайте операции увеличения, чтобы выполнить на учебных изображениях. В данном примере примените случайное отражение в оси X, случайное вращение из области значений [-90,90] степени и случайное перемасштабирование из области значений [1,2].
Нажмите Import, чтобы импортировать данные в Deep Network Designer.
Используя Deep Network Designer, можно визуально смотреть распределение данных об обучении и валидации во вкладке Data. Вы видите, что в этом примере существует пять классов в наборе данных. Можно также просмотреть случайные наблюдения от каждого класса.
Deep Network Designer изменяет размер изображений во время обучения совпадать с сетевым входным размером. Чтобы просмотреть сетевой входной размер, во вкладке Designer, нажимают imageInputLayer
. Эта сеть имеет входной размер 224 224.
Чтобы переобучить предварительно обученную сеть, чтобы классифицировать новые изображения, замените последний learnable слой и итоговый слой классификации с новыми слоями, адаптированными к новому набору данных. В GoogLeNet эти слои имеют имена 'loss3-classifier'
и 'output'
, соответственно.
Во вкладке Designer перетащите новый fullyConnectedLayer
от Библиотеки Слоя на холст. Установите OutputSize
к количеству классов в новых данных, в этом примере, 5
.
Отредактируйте скорости обучения, чтобы учиться быстрее в новых слоях, чем в переданных слоях. Установите WeightLearnRateFactor
и BiasLearnRateFactor
к 10
. Удалите последний полносвязный слой и соедините свой новый слой вместо этого.
Замените выходной слой. Прокрутите в конец Библиотеки Слоя и перетащите новый classificationLayer
на холст. Удалите исходный output
слой и подключение ваш новый слой вместо этого.
Проверяйте свою сеть путем нажатия на Analyze. Сеть готова к обучению, если Нейронная сеть для глубокого обучения Анализатор сообщает о нулевых ошибках.
Чтобы обучить сеть с настройками по умолчанию, на вкладке Training, нажимают Train.
Если вы хотите большее управление обучением, нажмите Training Options и выберите настройки, чтобы обучаться с. Опции обучения по умолчанию лучше подходят для больших наборов данных. Для небольших наборов данных используйте меньшие значения для мини-пакетного размера и частоты валидации. Для получения дополнительной информации о выборе опций обучения смотрите trainingOptions
.
В данном примере установите InitialLearnRate на 0.0001
, ValidationFrequency к 5
, и MaxEpochs к 8
. Как существует 55 наблюдений, установите MiniBatchSize на 11
разделить обучающие данные равномерно и гарантировать целый набор обучающих данных используются в течение каждой эпохи.
Чтобы обучить сеть с заданными опциями обучения, нажмите Close и затем нажмите Train.
Deep Network Designer позволяет вам визуализировать и контролировать процесс обучения. Можно затем отредактировать опции обучения и переобучить сеть при необходимости.
Чтобы экспортировать результаты обучения, на вкладке Training, выбирают Export> Export Trained Network и Results. Deep Network Designer экспортирует обучивший сеть как переменную trainedNetwork_1
и учебная информация как переменная trainInfoStruct_1
.
Можно также сгенерировать код MATLAB, который воссоздает сеть и используемые опции обучения. На вкладке Training выберите Export> Generate Code for Training.
Выберите новое изображение, чтобы классифицировать использование обучившего сеть.
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.