В этом примере показано, как подстроить предварительно обученную сверточную нейронную сеть AlexNet, чтобы выполнить классификацию на новом наборе изображений.
AlexNet обучен на более чем миллионе изображений и может классифицировать изображения в 1000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Сеть изучила представления богатых функций для широкой области значений изображений. Сеть принимает изображение как вход и выводит метку для объекта в изображении вместе с вероятностями для каждой из категорий объектов.
Передача обучения обычно используется в применениях глубокого обучения. Можно взять предварительно обученную сеть и использовать ее как начальная точка для изучения новой задачи. Подстройка сети с передачей обучения обычно намного быстрее и проще, чем обучение сети со случайным образом инициализированными весами с нуля. Можно быстро перенести выученные функции в новую задачу с помощью меньшего количества обучающих изображений.
Загрузка данных
Разархивируйте и загружайте новые изображения как image datastore. imageDatastore
автоматически помечает изображения на основе имен папок и сохраняет данные как ImageDatastore
объект. image datastore позволяет вам хранить большие данные изображения, включая данные, которые не помещаются в памяти, и эффективно считывать пакеты изображений во время обучения сверточной нейронной сети.
Разделите данные на наборы данных для обучения и валидации. Используйте 70% изображений для обучения и 30% для валидации. splitEachLabel
разделяет images
datastore в два новых хранилища данных.
Этот очень небольшой набор данных теперь содержит 55 обучающих изображений и 20 изображений для валидации. Отобразите некоторые образцовые изображения.
Загрузка предварительно обученной сети
Загрузите предварительно обученную нейронную сеть AlexNet. Если Deep Learning Toolbox™ Model для AlexNet Network не установлена, то программное обеспечение предоставляет ссылку загрузки. AlexNet обучен на более чем одном миллионе изображений и может классифицировать изображения в 1000 категорий объектов, таких как клавиатура, мышь, карандаш и многие животные. В результате модель получила богатые представления функций для широкой области значений изображений.
Использование analyzeNetwork
отображение интерактивной визуализации сетевой архитектуры и подробной информации о слоях сети.
Первый слой, входной слой для изображений, требует входа изображений размера 227 227 3, где 3 количество цветовых каналов.
inputSize = 1×3
227 227 3
Замена конечных слоев
Последние три слоя предварительно обученной сети net
настроены для 1000 классов. Эти три слоя должны быть уточнены для новой задачи классификации. Извлеките все слои, кроме последних трех, из предварительно обученной сети.
Перенесите слои в новую задачу классификации путем замены последних трех слоев полносвязным слоем, слоем softmax и выходным слоем классификации. Задайте опции нового полносвязного слоя в соответствии с новыми данными. Установите для полностью подключенного слоя тот же размер, что и для количества классов в новых данных. Чтобы учиться быстрее в новых слоях, чем в перенесенных слоях, увеличьте WeightLearnRateFactor
и BiasLearnRateFactor
значения полносвязного слоя.
Обучите сеть
Сеть требует входа изображений размера 227 227 3, но изображения в хранилищах данных изображений имеют различные размеры. Используйте хранилище данных дополненных изображений, чтобы автоматически изменить размер обучающих изображений. Задайте дополнительные операции увеличения для выполнения на обучающих изображениях: случайным образом разверните обучающие изображения вдоль вертикальной оси и случайным образом переведите их до 30 пикселей горизонтально и вертикально. Увеличение количества данных помогает предотвратить сверхподбор кривой сети и запоминание точных деталей обучающих изображений.
Чтобы автоматически изменить размер изображений валидации, не выполняя дальнейшего увеличения данных, используйте хранилище datastore с дополненными изображениями, не задавая никаких дополнительных операций предварительной обработки.
Задайте опции обучения. Для передачи обучения сохраните функции из ранних слоев предварительно обученной сети (веса переданных слоев). Чтобы замедлить обучение в перенесенных слоях, установите начальную скорость обучения на небольшое значение. На предыдущем шаге вы увеличили коэффициенты скорости обучения для полносвязного слоя, чтобы ускорить обучение в новых конечных слоях. Эта комбинация настроек скорости обучения приводит к быстрому обучению только в новых слоях и более медленному обучению в других слоях. При выполнении передачи обучения вам не нужно тренироваться на столько эпох. Эпоха - это полный цикл обучения на целом наборе обучающих данных. Укажите размер мини-пакета и данные валидации. Программное обеспечение проверяет сеть каждый ValidationFrequency
итерации во время обучения.
Обучите сеть, которая состоит из переданного и нового слоев. По умолчанию trainNetwork
использует графический процессор, если он доступен, в противном случае используется центральный процессор. Для обучения на графическом процессоре требуется Parallel Computing Toolbox™ и поддерживаемое устройство GPU. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Можно также задать окружение выполнения с помощью 'ExecutionEnvironment'
Аргумент пары "имя-значение" из trainingOptions
.
Классификация изображений валидации
Классифицируйте изображения валидации с помощью тонкой настройки сети.
Отобразите четыре изображения валидации образцов с их предсказанными метками.
Вычислите точность классификации на наборе валидации. Точность является частью меток, которые сеть предсказывает правильно.
Для советов по повышению точности классификации смотрите Советы по глубокому обучению и Рекомендации.