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