В этом примере показано, как использовать обучение передаче для переподготовки SqueeEcNet, предварительно обученной сверточной нейронной сети, для классификации нового набора изображений. Попробуйте попробовать этот пример, чтобы понять, как просто начать с глубокого обучения в MATLAB ®.
Transfer learning обычно используется в приложениях для глубокого обучения. Предварительно подготовленную сеть можно использовать в качестве отправной точки для изучения новой задачи. Точная настройка сети с обучением переносу обычно намного быстрее и проще, чем обучение сети с произвольно инициализированными весами с нуля. Вы можете быстро перенести изученные функции на новую задачу, используя меньшее количество обучающих изображений.

В рабочей области извлеките набор данных MathWorks Merch. Это небольшой набор данных, содержащий 75 изображений товаров MathWorks, принадлежащих пяти различным классам (колпачок, куб, игральные карты, отвертка и факел).
unzip("MerchData.zip");Откройте конструктор глубоких сетей.
deepNetworkDesigner
Выберите SqueeEcNet в списке предварительно обученных сетей и нажмите Открыть.

Deep Network Designer отображает увеличенное представление всей сети.

Изучите график сети. Чтобы увеличить изображение с помощью мыши, используйте клавиши Ctrl + колесо прокрутки. Для панорамирования используйте клавиши со стрелками или удерживайте колесо прокрутки и перетащите мышь. Выберите слой для просмотра его свойств. Отмените выбор всех слоев для просмотра сводки сети на панели «Свойства».
Чтобы загрузить данные в Deep Network Designer, на вкладке Данные щелкните Импорт данных > Импорт данных изображения. Откроется диалоговое окно Импорт данных изображения (Import Image Data).
В списке Источник данных выберите Папка. Нажмите кнопку Обзор и выберите извлеченную папку MerchData.
Разделите данные на 70% данных обучения и 30% данных проверки.
Укажите операции увеличения, выполняемые с обучающими изображениями. Увеличение объема данных помогает предотвратить переоборудование сети и запоминание точных деталей обучающих изображений. В этом примере применяется случайное отражение по оси X, случайное вращение из диапазона [-90, 90] градусов и случайное масштабирование из диапазона [1,2].

Нажмите кнопку Импорт, чтобы импортировать данные в Deep Network Designer.
Для переподготовки SqueeEcNet для классификации новых изображений замените последний 2-D сверточный уровень и конечный классификационный уровень сети. В SqueeEnet эти слои имеют имена 'conv10' и 'ClassificationLayer_predictions'соответственно.
На панели «Конструктор» перетащите новый convolution2dLayer на холст. Для соответствия исходному сверточному слою установите FilterSize кому 1,1. Править NumFilters количество классов в новых данных, в этом примере: 5.
Изменение скорости обучения таким образом, чтобы обучение происходило быстрее в новом слое, чем в перенесенных слоях, путем установки WeightLearnRateFactor и BiasLearnRateFactor кому 10.
Удалите последний сверточный слой 2-D и подключите новый слой.

Замените выходной слой. Прокрутка до конца библиотеки слоев и перетаскивание нового classificationLayer на холст. Удалите исходный выходной слой и подключите новый на его месте.

Чтобы выбрать параметры обучения, перейдите на вкладку Обучение и щелкните Параметры обучения. Установите для начальной скорости обучения небольшое значение, чтобы замедлить обучение в перенесенных слоях. На предыдущем шаге были увеличены коэффициенты скорости обучения для 2-D сверточного уровня для ускорения обучения на новых конечных уровнях. Такое сочетание настроек скорости обучения приводит к быстрому обучению только на новых уровнях и более медленному обучению на других уровнях.
В этом примере задайте InitiveLearnRate равным 0.0001, ValidationFrequency to 5, MaxEpochs to 8. Поскольку существует 55 наблюдений, установите MiniBatchSize в значение 11 для равномерного разделения обучающих данных и обеспечения использования всего обучающего набора в течение каждой эпохи.

Чтобы обучить сеть с указанными параметрами обучения, нажмите кнопку Закрыть, а затем нажмите кнопку Обучить.
Deep Network Designer позволяет визуализировать и контролировать ход обучения. Затем можно отредактировать варианты обучения и при необходимости переобучить сеть.

Чтобы экспортировать результаты обучения, на вкладке Обучение выберите Экспорт > Экспорт обученной сети и результатов. Deep Network Designer экспортирует обученную сеть в качестве переменной trainedNetwork_1 и информация об обучении в качестве переменной trainInfoStruct_1.
Также можно создать код MATLAB, который воссоздает сеть и используемые параметры обучения. На вкладке Обучение выберите Экспорт > Создать код для обучения. Изучите код MATLAB, чтобы узнать, как программно подготовить данные для обучения, создать архитектуру сети и обучить сеть.
Загрузите новый образ для классификации с использованием обученной сети.
I = imread("MerchDataTest.jpg");Измените размер тестового образа в соответствии с размером сетевого входа.
I = imresize(I, [227 227]);
Классифицируйте тестовый образ с помощью обученной сети.
[YPred,probs] = classify(trainedNetwork_1,I); imshow(I) label = YPred; title(string(label) + ", " + num2str(100*max(probs),3) + "%");

[1] ImageNet. http://www.image-net.org
[2] Иандола, Форрест Н., Сон Хан, Мэтью У. Москевич, Халид Ашраф, Уильям Дж. Далли и Курт Кейцер. «Точность на уровне SqueeNet: AlexNet с 50-кратным уменьшением параметров и размером модели < 0,5 МБ». Препринт, представлен 4 ноября 2016 года. https://arxiv.org/abs/1602.07360 .
[3] Иандола, Форрест Н. «SqueeEcNet». https://github.com/forresti/SqueezeNet.
Конструктор глубоких сетей | squeezenet | trainingOptions | trainNetwork