В этом примере показано, как подстроить предварительно обученную сеть 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 Data открывается.
В списке Источников данных выберите Folder. Нажмите Browse и выберите извлеченную папку MerchData.
Диалоговое окно также позволяет вам разделять данные о валидации из приложения. Разделите данные на 70% обучающих данных и 30%-х данных о валидации.
Задайте операции увеличения, чтобы выполнить на учебных изображениях. В данном примере примените случайное отражение в оси X, случайное вращение из области значений [-90,90] степени и случайное перемасштабирование из области значений [1,2].
Нажмите Import, чтобы импортировать данные в Deep Network Designer.
Deep Network Designer изменяет размер изображений во время обучения совпадать с сетевым входным размером. Чтобы просмотреть сетевой входной размер, на панели Разработчика, нажимают imageInputLayer
. Эта сеть имеет входной размер 224 224.
Используя Deep Network Designer, можно визуально смотреть распределение данных об обучении и валидации в панели Данных. Вы видите, что в этом примере существует пять классов в наборе данных.
Чтобы переобучить предварительно обученную сеть, чтобы классифицировать новые изображения, замените последние слои на новые слои, адаптированные к новому набору данных.
В панели Разработчика перетащите новый fullyConnectedLayer
от Библиотеки Слоя на холст. Установите OutputSize
к количеству классов в новых данных, в этом примере, 5
.
Отредактируйте скорости обучения, чтобы учиться быстрее в новых слоях, чем в переданных слоях. Установите WeightLearnRateFactor
и BiasLearnRateFactor
к 10. Удалите последний полносвязный слой и соедините свой новый слой вместо этого.
Замените выходной слой. Прокрутите в конец Библиотеки Слоя и перетащите новый classificationLayer
на холст. Удалите исходный output
слой и подключение ваш новый слой вместо этого.
Чтобы убедиться ваша отредактированная сеть готова к обучению, нажмите Analyze и обеспечьте Нейронной сети для глубокого обучения нулевые ошибки отчетов Анализатора.
Чтобы обучить сеть с настройками по умолчанию, на вкладке Training, нажимают Train.
Если вы хотите большее управление обучением, нажмите Training Options и выберите настройки, чтобы обучаться с. Опции обучения по умолчанию лучше подходят для больших наборов данных. Для небольших наборов данных используйте меньшие значения в MiniBatchSize
и ValidationFrequency
. Для получения дополнительной информации о выборе опций обучения смотрите 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.