Передайте изучение с Deep Network Designer

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

Используйте обучение с переносом путем выполнения этих шагов:

  1. Выберите предварительно обученную сеть и импортируйте ее в приложение.

  2. Замените последние слои на новые слои, адаптированные к новому набору данных:

    1. Задайте новое количество классов в ваших учебных изображениях.

    2. Установите темпы обучения учиться быстрее в новых слоях, чем в переданных слоях.

  3. Экспортируйте сеть для обучения в командной строке.

Выберите предварительно обученную сеть

Deep Learning Toolbox™ обеспечивает выбор предварительно обученных сетей классификации изображений, которые изучили богатые представления функции, подходящие для широкого спектра изображений. Изучение передачи работает лучше всего, если ваши изображения похожи на изображения, первоначально раньше обучал сеть. Если ваши учебные изображения являются естественными изображениями как те в базе данных ImageNet, то любая из предварительно обученных сетей подходит. Чтобы попробовать более быструю сеть сначала, используйте googlenet или squeezenet. Для списка доступных сетей и как сравнить их, смотрите Предварительно обученные Глубокие нейронные сети.

Если ваши данные очень отличаются от данных ImageNet, может быть лучше обучить новую сеть. Например, если вы имеете крошечные изображения, спектрограммы, или не отображаете данные, затем смотрите вместо этого Сети Сборки с Deep Network Designer.

Загрузите предварительно обученную сеть GoogLeNet. Если необходимо загрузить сеть, то функция обеспечивает ссылку на Add-On Explorer.

net = googlenet;

Сеть импорта в Deep Network Designer

Чтобы открыть Deep Network Designer, на вкладке Apps, под Machine Learning and Deep Learning, кликают по значку приложения. В качестве альтернативы можно открыть приложение из командной строки.

deepNetworkDesigner

Нажмите Import и выберите сеть, чтобы загрузить из рабочей области. Deep Network Designer отображает уменьшивший масштаб представление целой сети.

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

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

Сеть классифицирует входные изображения с помощью последнего learnable слоя и итогового слоя классификации. Чтобы переобучить предварительно обученную сеть, чтобы классифицировать новые изображения, замените эти последние слои на новые слои, адаптированные к новому набору данных.

Измените количество классов

Чтобы использовать предварительно обученную сеть в изучении передачи, необходимо изменить количество классов, чтобы совпадать новым набором данных. Во-первых, найдите последний learnable слой в сети. Для GoogLeNet и большинства предварительно обученных сетей, последний learnable слой является полносвязным слоем. Кликните по слою loss3-classifier и просмотрите его свойства.

OutputSize свойство задает количество классов для проблем классификации. Панель Properties указывает, что предварительно обученная сеть может классифицировать изображения в 1 000 классов. Вы не можете отредактировать OutputSize.

Чтобы изменить количество классов, перетащите новый fullyConnectedLayer от Layer Library на холст. Отредактируйте OutputSize свойство к количеству классов в ваших данных. В данном примере введите 5. Удалите исходный loss3-classifier слой и подключение ваш новый слой в его месте.

Выберите последний слой, слой классификации. В панели Свойств, свойство слоя OutputSize показывает 1 000 классов и первые несколько имен классов.

Для изучения передачи необходимо заменить выходной слой. Прокрутите в конец Layer Library и перетащите новый classificationLayer на холст. Удалите исходный output слой и подключение ваш новый слой в его месте. Для нового выходного слоя вы не должны устанавливать OutputSize. В учебное время, trainNetwork автоматически устанавливает выходные классы слоя из данных.

Заставьте новые слои учиться быстрее

Отредактируйте темпы обучения, чтобы учиться быстрее в новом слое, чем в переданных слоях. На вашем новом fullyConnectedLayer слой, набор WeightLearnRateFactor и BiasLearnRateFactor к 10.

Проверяйте сеть

Чтобы проверять сеть и исследовать больше деталей слоев, нажмите Analyze. Отредактированная сеть готова к обучению, если Нейронная сеть для глубокого обучения Анализатор сообщает о нулевых ошибках.

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

Чтобы экспортировать сеть в рабочую область, возвратитесь к Deep Network Designer и нажмите Export. Deep Network Designer экспортирует сеть в новую переменную, содержащую отредактированные сетевые слои, названные lgraph_1. После экспорта можно предоставить переменную слоя к trainNetwork функция. Можно также сгенерировать код MATLAB®, который воссоздает сетевую архитектуру и возвращает ее как переменную в рабочей области. Для получения дополнительной информации смотрите, Генерируют код MATLAB от Deep Network Designer.

Обучите сеть экспортируемые от Deep Network Designer

В этом примере показано, как использовать сеть, экспортируемую от Deep Network Designer для изучения передачи. После подготовки сети в приложении вы должны:

  • Измените размер изображений.

  • Задайте опции обучения.

  • Обучите сеть.

Измените размер изображений для изучения передачи

Для изучения передачи измените размер своих изображений, чтобы совпадать с входным размером предварительно обученной сети. Чтобы найти входной размер изображений сети, в Deep Network Designer, исследуют imageInputLayer. Для GoogLeNet, InputSize 224x224.

Разархивируйте и загрузите изображения как datastore изображений. Этот очень небольшой набор данных содержит только 75 изображений в 5 классах. Разделите данные на 70% для обучения и 30% для валидации.

unzip('MerchData.zip');
imds = imageDatastore('MerchData', ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames'); 
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7);

Если ваши учебные изображения находятся в папке с подпапками для каждого класса, можно создать datastore для данных, заменив MerchData с местоположением папки. Проверяйте количество классов - необходимо подготовить сеть к передаче, учащейся с количеством классов совпадать данными.

Измените размер изображений в хранилищах данных изображений, чтобы совпадать с предварительно обученной сетью GoogLeNet.

augimdsTrain = augmentedImageDatastore([224 224],imdsTrain);
augimdsValidation = augmentedImageDatastore([224 224],imdsValidation);

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

Установите опции обучения для изучения передачи

Перед обучением задайте опции обучения.

  • Для изучения передачи, набор InitialLearnRate к маленькому значению, чтобы замедлить изучение в переданных слоях. В приложении вы увеличили факторы темпа обучения для полносвязного слоя, чтобы ускорить изучение в новых последних слоях. Эта комбинация настроек темпа обучения приводит к быстрому изучению только в новых слоях и более медленном изучении в других слоях.

  • Задайте небольшое количество эпох. Эпоха является полным учебным циклом на целом обучающем наборе данных. Для изучения передачи вы не должны обучаться для как много эпох. Переставьте данные каждая эпоха.

  • Задайте мини-пакетный размер, то есть, сколько изображений, чтобы использовать в каждой итерации.

  • Задайте данные о валидации и частоту валидации.

  • Включите учебный график контролировать прогресс, в то время как вы обучаетесь.

options = trainingOptions('sgdm', ...
    'MiniBatchSize',10, ...
    'MaxEpochs',6, ...
    'InitialLearnRate',1e-4, ...
    'Shuffle','every-epoch', ...
    'ValidationData',augimdsValidation, ...
    'ValidationFrequency',6, ...
    'Verbose',false, ...
    'Plots','training-progress');

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

Чтобы обучить сеть, предоставьте слои, которые вы экспортировали из приложения, здесь названного lgraph_1, ваши измененные изображения и опции обучения, к trainNetwork функция. По умолчанию, trainNetwork использует графический процессор при наличии (требует Parallel Computing Toolbox™). В противном случае это использует центральный процессор. Обучение быстро, потому что набор данных так мал.

net = trainNetwork(augimdsTrain,lgraph_1,options);

Тест обучил сеть путем классификации изображений валидации

Используйте подстроенную сеть, чтобы классифицировать изображения валидации и вычислить точность классификации.

[YPred,probs] = classify(net,augimdsValidation);
accuracy = mean(YPred == imdsValidation.Labels)
accuracy = 0.9000

Отобразите четыре демонстрационных изображения валидации с предсказанными метками и предсказанными вероятностями.

idx = randperm(numel(imdsValidation.Files),4);
figure
for i = 1:4
    subplot(2,2,i)
    I = readimage(imdsValidation,idx(i));
    imshow(I)
    label = YPred(idx(i));
    title(string(label) + ", " + num2str(100*max(probs(idx(i),:)),3) + "%");
end

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте