В этом примере показано, как создать пользовательский эксперимент по обучению для обучения сиамской сети, которая идентифицирует аналогичные изображения рукописных символов. Для пользовательского обучающего эксперимента вы явным образом задаете процедуру обучения, используемую Experiment Manager. В этом примере вы реализуете пользовательский цикл обучения для обучения сиамской сети, типа нейронной сети для глубокого обучения, которая использует две или более идентичных подсетей, которые имеют одинаковую архитектуру и имеют одинаковые параметры и веса. Некоторые общие приложения для сиамских сетей включают распознавание лиц, верификацию подписей и идентификацию перефразирования.
Эта схема иллюстрирует сиамскую сетевую архитектуру в этом примере.
Чтобы сравнить два изображения, вы передаете каждое изображение через одну из двух одинаковых подсетей, которые имеют общие веса. Подсети преобразовывают каждое изображение 105 на 105 на 1 в 4096-мерный вектор функции. Изображения того же класса имеют сходные 4096-мерные представления. Выходы функций из каждой подсети объединяются посредством вычитания, и результат передается через fullyconnect
операция с одним выходом. Сигмоидная операция преобразует это значение в вероятность, указывающую, что изображения похожи (когда вероятность близка к 1) или различны (когда вероятность близка к 0). Двоичная потеря перекрестной энтропии между предсказанием сети и истинной меткой обновляет сеть во время обучения. Для получения дополнительной информации смотрите Обучите сиамскую сеть сравнению изображений.
Сначала откройте пример. Experiment Manager загружает проект с помощью предварительно сконфигурированного эксперимента, который можно просмотреть и запустить. Чтобы открыть эксперимент, в панели Experiment Browser дважды кликните имя эксперимента (ImageComparisonExperiment
).
Пользовательские эксперименты по обучению состоят из описания, таблицы гиперпараметров и обучающей функции. Дополнительные сведения см. в разделе Настройка пользовательского обучающего эксперимента.
Поле Description содержит текстовое описание эксперимента. В данном примере описанием является:
Train a Siamese network to identify similar and dissimilar images of handwritten characters. Try different weight and bias initializers for the convolution and fully connected layers in the network.
Раздел «Гиперпараметры» задает значения гиперзначений параметров, используемые для эксперимента. Когда вы запускаете эксперимент, Experiment Manager обучает сеть с помощью каждой комбинации значений гиперзначений параметров, заданных в таблице гиперпараметра. Этот пример использует гиперпараметры WeightsInitializer
и BiasInitializer
чтобы задать инициализаторы веса и смещения, соответственно, для свертки и полносвязных слоев в каждой подсети. Для получения дополнительной информации об этих инициализаторах смотрите WeightsInitializer
и BiasInitializer
.
Функция обучения задает обучающие данные, сетевую архитектуру, опции обучения и процедуру обучения, используемые экспериментом. Чтобы просмотреть функцию обучения, в разделе Training Function нажатия кнопки Edit. Функция обучения откроется в MATLAB ® Editor.
Вход функции обучения представляет собой структуру с полями из таблицы гиперпараметров и
объект, который можно использовать, чтобы отслеживать прогресс обучения, записывать значения метрик, используемых в обучении, и создавать обучающие графики. Функция обучения возвращает структуру, которая содержит обученную сеть, веса для конечной experiments.Monitor
fullyconnect
операция для сети и окружение выполнения, используемая для обучения. Experiment Manager сохраняет этот выход, поэтому можно экспортировать ее в Рабочее пространство MATLAB по завершении обучения. Функция обучения состоит из пяти разделов.
Initialize Output устанавливает начальное значение сети и fullyconnect
веса для пустых массивов, что указывает на то, что обучение не началось. Эксперимент устанавливает окружение выполнения на "auto"
, поэтому он обучает и проверяет сеть на графическом процессоре, если он доступен. Для использования графический процессор требуется Parallel Computing Toolbox™ и поддерживаемый графический процессор. Для получения дополнительной информации смотрите Поддержку GPU by Release (Parallel Computing Toolbox).
Загрузка и предварительная обработка обучающих и тестовых данных определяет обучающие и тестовые данные для эксперимента следующим imageDatastore
объекты. В эксперименте используется набор данных Omniglot, который состоит из наборов символов для 50 алфавитов, разделенных на 30 наборов для обучения и 20 наборов для проверки. Дополнительные сведения об этом наборе данных см. в разделе Наборы данных изображений.
Определите Сетевую Архитектуру, определяет архитектуру для двух идентичных подсетей, которые принимают изображения 105 на 105 на 1 и производят вектор функции. Свертки и полносвязные слои используют веса и инициализаторы смещения, указанные в таблице гиперпараметров. Чтобы обучить сеть с помощью пользовательского цикла обучения и включить автоматическую дифференциацию, функция обучения преобразует график слоев в dlnetwork
объект. Веса для финальной fullyconnect
операция инициализируется выбором случайного выбора из узкого нормального распределения со стандартным отклонением 0,01.
Настройка опций обучения определяет опции обучения, используемые экспериментом. В этом примере Experiment Manager обучает сеть с размером мини-пакета 180 для 1000 итераций, вычисляя точность сети каждые 100 итераций. Обучение может занять некоторое время. Для получения лучших результатов рассмотрите увеличение обучения до 10 000 итераций.
Train задаёт пользовательский цикл обучения, используемый экспериментом. Для каждой итерации пользовательский цикл обучения извлекает пакет пар изображений и меток, преобразует данные в dlarray
объекты с базовым типом single и задают метки размерностей 'SSCB'
(пространственный, пространственный, канал, пакет) для данных изображения и 'CB'
(канал, пакет) для меток. Если вы обучаетесь на графическом процессоре, данные преобразуются в gpuArray
объекты. Затем функция обучения оценивает градиенты модели и обновляет параметры сети. Для проверки функция обучения создает набор из пяти случайных мини-пакетов тестовых пар, оценивает предсказания сети и вычисляет среднюю точность по мини-пакетам. После каждой итерации пользовательского цикла обучения функция обучения сохраняет обученную сеть и веса для fullyconnect
операция, регистрирует потерю обучения и обновляет процесс обучения.
Когда вы запускаете эксперимент, Experiment Manager обучает сеть, заданную функцией обучения, несколько раз. В каждом испытании используется разная комбинация значений гиперзначений параметров. По умолчанию Experiment Manager запускает по одной пробной версии за раз. Если у вас есть Parallel Computing Toolbox, можно запустить несколько испытаний одновременно. Для достижения наилучших результатов, прежде чем вы запустите свой эксперимент, запустите параллельный пул с таким количеством работников, как графические процессоры. Для получения дополнительной информации смотрите Использование Experiment Manager для параллельного обучения сетей.
Чтобы запустить по одной пробной версии эксперимента за раз, на панели инструментов Experiment Manager нажмите кнопку Запустить.
Чтобы запустить несколько испытаний одновременно, щелкните Использовать Параллель (Use Parallel) и затем Запуск. Если текущий параллельный пул отсутствует, Experiment Manager запускает его с помощью профиля кластера по умолчанию. Затем Experiment Manager выполняет несколько одновременных испытаний, в зависимости от количества доступных параллельных работников.
Таблица результатов отображает потери обучения и точность валидации для каждого испытания.
Во время выполнения эксперимента нажмите Training Plot, чтобы отобразить график обучения и отследить прогресс в каждом испытании.
Чтобы найти лучший результат для вашего эксперимента, отсортируйте таблицу результатов по точности валидации.
Укажите столбец ValidationAccuracy.
Щелкните значок треугольника.
Выберите Сортировка в порядке убывания.
Пробная версия с самой высокой точностью валидации появится в верхней части таблицы результатов.
Чтобы визуально проверить, правильно ли сеть идентифицирует похожие и разнородные пары:
Выберите пробную версию с самой высокой точностью.
На панели инструментов Experiment Manager нажмите кнопку Экспорт.
В диалоговом окне введите имя переменной рабочей области для экспортированного выхода обучения. Имя по умолчанию trainingOutput
.
Протестируйте сеть на небольшом пакете пар изображений путем вызова displayTestSet
функция. Используйте экспортированный выход обучения как вход в функцию. Для образца в Командном Окне MATLAB введите:
displayTestSet(trainingOutput)
Функция отображает 10 случайным образом выбранных пар тестовых изображений с предсказанием из обученной сети, счетом вероятности и меткой, указывающей, является ли предсказание правильным или неправильным.
Чтобы записать наблюдения о результатах эксперимента, добавьте аннотацию.
В таблице результатов щелкните правой кнопкой мыши камеру ValidationAccuracy лучшей пробной версии.
Выберите «Добавить аннотацию».
На панели аннотации введите свои наблюдения в текстовое поле.
Для получения дополнительной информации см. Раздел «Сортировка, фильтрация и аннотация результатов эксперимента».
На панели браузера экспериментов щелкните правой кнопкой мыши имя проекта и выберите «Закрыть проект». Experiment Manager закрывает все эксперименты и результаты, содержащиеся в проекте.