В этом примере показано, как использовать обучение с переносом в интерактивном режиме с помощью приложения Deep Network Designer.
Передача обучения является процессом взятия предварительно обученной нейронной сети для глубокого обучения и подстройки его, чтобы изучить новую задачу. Используя передачу обучения обычно быстрее и легче, чем обучение сети с нуля. Можно быстро передать изученные функции новой задаче с помощью меньшего объема данных.
Используйте Deep Network Designer, чтобы использовать обучение с переносом для классификации изображений путем выполнения этих шагов:
Откройте приложение Deep Network Designer и выберите предварительно обученную сеть.
Импортируйте новый набор данных.
Замените последние слои на новые слои, адаптированные к новому набору данных.
Установите скорости обучения так, чтобы изучение было быстрее в новых слоях, чем в переданных слоях.
Обучите сеть с помощью Deep Network Designer или экспортируйте сеть для обучения в командной строке.
В рабочей области извлеките набор данных MathWorks Merch. Это - небольшой набор данных, содержащий 75 изображений товаров MathWorks, принадлежа пяти различным классам (дно, куб, игра в карты, отвертка и факел).
unzip("MerchData.zip");
Чтобы открыть Deep Network Designer, на вкладке Apps, под Машинным обучением и Глубоким обучением, кликают по значку приложения. В качестве альтернативы можно открыть приложение из командной строки:
deepNetworkDesigner
Deep Network Designer обеспечивает выбор предварительно обученных сетей классификации изображений, которые изучили богатые представления функции, подходящие для широкого спектра изображений. Передача обучения работает лучше всего, если ваши изображения похожи на изображения, первоначально раньше обучал сеть. Если ваши учебные изображения являются естественными изображениями как те в базе данных ImageNet, то любая из предварительно обученных сетей подходит. Для списка доступных сетей и как сравнить их, смотрите Предварительно обученные Глубокие нейронные сети.
Если ваши данные очень отличаются от данных ImageNet — например, если вы имеете крошечные изображения, спектрограммы, или не отображаете данные — обучение новой сети может быть лучше. Для примеров, показывающих, как обучить сеть с нуля, смотрите, Создают Простую Сеть Классификации Последовательностей Используя Deep Network Designer и Создают Простую Сеть Семантической Сегментации в Deep Network Designer.
SqueezeNet не требует дополнительного пакета поддержки. Для других предварительно обученных сетей, если у вас нет необходимого пакета поддержки установленным, затем приложение предоставляет возможность Установки.
Выберите SqueezeNet из списка предварительно обученных сетей и нажмите Open.
Deep Network Designer отображает уменьшивший масштаб представление целой сети в панели Разработчика.
Исследуйте сетевой график. Чтобы увеличить масштаб с мышью, используйте колесо Ctrl+scroll. К панорамированию используйте клавиши со стрелками, или удерживайте колесико прокрутки и перетащите мышь. Выберите слой, чтобы просмотреть его свойства. Отмените выбор всех слоев, чтобы просмотреть сетевые сводные данные в панели Свойств.
Чтобы загрузить данные в Deep Network Designer, на вкладке Data, нажимают Import Data> Import Image Data. Диалоговое окно Import Image Data открывается.
В списке Источников данных выберите Folder. Нажмите Browse и выберите извлеченную папку MerchData.
Можно принять решение применить увеличение изображений к обучающим данным. Приложение Deep Network Designer предоставляет следующие возможности увеличения:
Случайное отражение в оси X
Случайное отражение в оси Y
Случайное вращение
Случайное перемасштабирование
Случайный горизонтальный перевод
Случайный вертикальный перевод
Можно эффективно увеличить сумму обучающих данных путем применения рандомизированного увеличения к данным. Увеличение также позволяет вам обучить нейронные сети, чтобы быть инвариантными к искажениям в данных изображения. Например, можно добавить рандомизированные вращения, чтобы ввести изображения так, чтобы сеть была инвариантной к присутствию вращения во входных изображениях.
В данном примере примените случайное отражение в оси X, случайное вращение из области значений [-90,90] степени и случайное перемасштабирование из области значений [1,2].
Можно также принять решение импортировать данные о валидации или путем разделения его от обучающих данных, или путем импорта его из другого источника. Валидация оценивает производительность модели на новых данных по сравнению с обучающими данными и помогает вам контролировать эффективность и защитить от сверхподбора кривой.
В данном примере используйте 30% изображений для валидации.
Нажмите Import, чтобы импортировать данные в Deep Network Designer.
Используя Deep Network Designer, можно визуально смотреть распределение данных об обучении и валидации во вкладке Data. Вы видите, что в этом примере существует пять классов в наборе данных. Можно также видеть случайные наблюдения от каждого класса.
Отредактируйте сеть в панели Разработчика, чтобы задать новое количество классов в ваших данных. Чтобы подготовить сеть к передаче обучения, замените последний learnable слой и итоговый слой классификации.
Чтобы использовать предварительно обученную сеть для передачи обучения, необходимо изменить количество классов, чтобы совпадать новым набором данных. Во-первых, найдите последний learnable слой в сети. Для SqueezeNet последний learnable слой является последним сверточным слоем, 'conv10'
. В этом случае замените сверточный слой на новый сверточный слой с количеством фильтров, равных количеству классов.
Перетащите новый convolution2dLayer
на холст. Чтобы совпадать с исходным сверточным слоем, установите FilterSize
к 1,1
.
NumFilters
свойство задает количество классов для проблем классификации. Измените NumFilters
к количеству классов в новых данных, в этом примере, 5
.
Измените скорости обучения так, чтобы изучение было быстрее в новом слое, чем в переданных слоях установкой WeightLearnRateFactor
и BiasLearnRateFactor
к 10
.
Удалите последний 2D сверточный слой и соедините свой новый слой вместо этого.
Для передачи обучения необходимо заменить выходной слой. Прокрутите в конец Библиотеки Слоя и перетащите новый classificationLayer
на холст. Удалите исходный слой классификации и соедините свой новый слой в его месте.
Для нового выходного слоя вы не должны устанавливать OutputSize
. В учебное время Deep Network Designer автоматически устанавливает выходные классы слоя из данных.
Чтобы проверять, что сеть готова к обучению, нажмите Analyze. Если Нейронная сеть для глубокого обучения нулевые ошибки отчетов Анализатора, то отредактированная сеть готова к обучению.
В Deep Network Designer можно обучить нейронные сети импортированные или созданные в приложении.
Чтобы обучить сеть с настройками по умолчанию, на вкладке Training, нажимают Train. Опции обучения по умолчанию лучше подходят для больших наборов данных, поскольку небольшие наборы данных уменьшают мини-пакетный размер и частоту валидации.
Если вы хотите большее управление обучением, нажмите Training Options и выберите настройки, чтобы обучаться с.
Установите начальную букву, изучают уровень маленькому значению, чтобы замедлить изучение в переданных слоях.
Задайте частоту валидации так, чтобы точность на данных о валидации была вычислена один раз в эпоху.
Задайте небольшое количество эпох. Эпоха является полным учебным циклом на целом обучающем наборе данных. Для передачи обучения вы не должны обучаться для как много эпох.
Задайте мини-пакетный размер, то есть, сколько изображений, чтобы использовать в каждой итерации. Гарантировать целый набор данных используется в течение каждой эпохи, установите мини-пакетный размер равномерно делить количество обучающих выборок.
В данном примере установите InitialLearnRate на 0.0001
, ValidationFrequency к 5
, и MaxEpochs к 8
. Как существует 55 наблюдений, установите MiniBatchSize на 11
чтобы разделить обучающие данные равномерно и убедиться, вы используете целый обучающий набор данных в течение каждой эпохи. Для получения дополнительной информации о выборе опций обучения смотрите trainingOptions
.
Чтобы обучить сеть с заданными опциями обучения, нажмите Close и затем нажмите Train.
Deep Network Designer позволяет вам визуализировать и контролировать процесс обучения. Можно затем отредактировать опции обучения и переобучить сеть при необходимости.
Чтобы экспортировать сетевую архитектуру с обученными весами, на вкладке Training, выбирают Export> Export Trained Network и Results. Deep Network Designer экспортирует обучивший сеть как переменную trainedNetwork_1
и учебная информация как переменная trainInfoStruct_1
.
trainInfoStruct_1
trainInfoStruct_1 = struct with fields:
TrainingLoss: [1×40 double]
TrainingAccuracy: [1×40 double]
ValidationLoss: [4.3374 NaN NaN NaN 2.4329 NaN NaN NaN NaN 1.3966 NaN NaN NaN NaN 0.7526 NaN NaN NaN NaN 0.6424 NaN NaN NaN NaN 0.6349 NaN NaN NaN NaN 0.5940 NaN NaN NaN NaN 0.5490 NaN NaN NaN NaN 0.5179]
ValidationAccuracy: [10 NaN NaN NaN 15 NaN NaN NaN NaN 40 NaN NaN NaN NaN 70 NaN NaN NaN NaN 85 NaN NaN NaN NaN 90 NaN NaN NaN NaN 85 NaN NaN NaN NaN 90 NaN NaN NaN NaN 95]
BaseLearnRate: [1×40 double]
FinalValidationLoss: 0.5179
FinalValidationAccuracy: 95
Можно также сгенерировать код MATLAB, который воссоздает сеть и используемые опции обучения. На вкладке Training выберите Export> Generate Code for Training. Исследуйте код MATLAB, чтобы изучить, как программно подготовить данные к обучению, создать сетевую архитектуру и обучить сеть.
Загрузите новое изображение, чтобы классифицировать использование обучившего сеть.
I = imread("MerchDataTest.jpg");
Deep Network Designer изменяет размер изображений во время обучения совпадать с сетевым входным размером. Чтобы просмотреть сетевой входной размер, перейдите к Разработчику, разделяют на области и выбирают imageInputLayer
(первый слой). Эта сеть имеет входной размер 227 227.
Измените размер тестового изображения, чтобы совпадать с сетевым входным размером.
I = imresize(I, [227 227]);
Классифицируйте тестовое изображение с помощью обучившего сеть.
[YPred,probs] = classify(trainedNetwork_1,I); imshow(I) label = YPred; title(string(label) + ", " + num2str(100*max(probs),3) + "%");