В этом примере показано, как создать пользовательский учебный эксперимент, чтобы обучить сиамскую сеть, которая идентифицирует подобные изображения рукописных символов. Для пользовательского учебного эксперимента вы явным образом задаете метод обучения, используемый Experiment Manager. В этом примере вы реализуете пользовательский учебный цикл, чтобы обучить сиамскую сеть, тип нейронной сети для глубокого обучения, которая использует две или больше идентичных подсети, которые имеют ту же архитектуру и совместно используют те же параметры и веса. Некоторые распространенные приложения для сиамских сетей включают распознавание лиц, верификацию подписи, и перефразируют идентификацию.
Эта схема иллюстрирует сиамскую сетевую архитектуру в этом примере.
Чтобы сравнить два изображения, вы передаете каждое изображение через одну из двух идентичных подсетей та доля веса. Подсети преобразуют каждого 105 105 1 изображением к 4096-мерному характеристическому вектору. Изображения того же класса имеют подобные 4096-мерные представления. Выходные характеристические векторы от каждой подсети объединены посредством вычитания, и результат передается через fullyconnect
операция с одним выходом. Сигмоидальная операция преобразует это значение в вероятность, указывающую, что изображения подобны (когда вероятность близко к 1), или отличающийся (когда вероятность близко к 0). Бинарная потеря перекрестной энтропии между сетевым предсказанием и истинной меткой обновляет сеть во время обучения. Для получения дополнительной информации смотрите, Обучают сиамскую Сеть, чтобы Сравнить Изображения.
Во-первых, откройте пример. Experiment Manager загружает проект с предварительно сконфигурированным экспериментом, который можно смотреть и запустить. Чтобы открыть эксперимент, в панели Браузера Эксперимента, дважды кликают имя эксперимента (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.
Раздел Hyperparameters задает гиперзначения параметров, чтобы использовать для эксперимента. Когда вы запускаете эксперимент, Experiment Manager обучает сеть с помощью каждой комбинации гиперзначений параметров, заданных в гипертаблице параметров. Этот пример использует гиперпараметры WeightsInitializer
и BiasInitializer
задавать вес и инициализаторы смещения, соответственно, для свертки и полносвязных слоев в каждой подсети. Для получения дополнительной информации об этих инициализаторах, смотрите WeightsInitializer
и BiasInitializer
.
Учебная Функция задает обучающие данные, сетевую архитектуру, опции обучения и метод обучения, используемый экспериментом. Чтобы смотреть учебную функцию, под Учебной Функцией, нажимают Edit. Учебная функция открывается в Редакторе MATLAB®.
Вход к учебной функции является структурой с полями от гипертаблицы параметров и
возразите, что можно использовать, чтобы отследить прогресс обучения, значения записи метрик, используемых обучением, и произвести учебные графики. Учебная функция возвращает структуру, которая содержит обучивший сеть, веса для итогового experiments.Monitor
fullyconnect
операция для сети и среда выполнения используются для обучения. Experiment Manager сохраняет этот выход, таким образом, можно экспортировать его в рабочее пространство MATLAB, когда обучение завершено. Учебная функция имеет пять разделов.
Инициализируйте Выход, устанавливает начальное значение сети и fullyconnect
веса к пустым массивам, чтобы указать, что обучение не запустилось. Эксперимент устанавливает среду выполнения на "auto"
, таким образом, это обучает и проверяет сеть на графическом процессоре, если вы доступны. Используя графический процессор требует Parallel Computing Toolbox™ и поддерживаемого устройства графического процессора. Для получения дополнительной информации смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).
Загрузите и Предварительно обработайте Обучение, и Тестовые данные задает обучение и тестовые данные для эксперимента как imageDatastore
объекты. Эксперимент использует набор данных Omniglot, который состоит из наборов символов для 50 алфавитов, разделенных на 30 наборов для обучения и 20 наборов для тестирования. Для получения дополнительной информации об этом наборе данных смотрите Наборы Данных изображения.
Архитектура Сети Define задает архитектуру для двух идентичных подсетей, которые принимают 105 105 1 изображением и выводят характеристический вектор. Свертка и полносвязные слоя используют веса и смещают инициализаторы, заданные в таблице гиперпараметра. Чтобы обучить сеть с пользовательским учебным циклом и включить автоматическое дифференцирование, учебная функция преобразует график слоев в dlnetwork
объект. Веса для итогового fullyconnect
операция инициализируется путем выборки случайного выбора от узкого нормального распределения со стандартным отклонением 0,01.
Укажите, что Опции обучения задают опции обучения, используемые экспериментом. В этом примере Experiment Manager обучает сеть с мини-пакетным размером 180 для 1 000 итераций, вычисляя точность сети каждые 100 итераций. Обучение может занять время, чтобы запуститься. Для лучших результатов рассмотрите увеличение обучения к 10 000 итераций.
Обучайтесь Модель задает пользовательский учебный цикл, используемый экспериментом. Для каждой итерации пользовательский учебный цикл извлекает пакет пар изображений и меток, преобразует данные в dlarray
объекты с базовым одним типом, и указывают, что размерность маркирует 'SSCB'
(пространственный, пространственный, канал, пакет) для данных изображения и 'CB'
(образуйте канал, пакет) для меток. Если вы обучаетесь на графическом процессоре, данные преобразованы в gpuArray
объекты. Затем учебная функция оценивает градиенты модели и обновляет сетевые параметры. Чтобы подтвердить, учебная функция создает набор пяти случайных мини-пакетов тестовых пар, оценивает сетевые предсказания и вычисляет среднюю точность по мини-пакетам. После каждой итерации пользовательского учебного цикла учебная функция сохраняет обучивший сеть и веса для fullyconnect
операция, записывает учебную потерю и обновляет процесс обучения.
Когда вы запускаете эксперимент, Experiment Manager обучает сеть, заданную учебной функцией многократно. Каждое испытание использует различную комбинацию гиперзначений параметров. По умолчанию Experiment Manager запускает одно испытание за один раз. Если у вас есть Parallel Computing Toolbox, можно запустить несколько испытаний одновременно. Для лучших результатов, прежде чем вы запустите свой эксперимент, начинают параллельный пул со стольких же рабочих сколько графические процессоры. Для получения дополнительной информации смотрите Использование Experiment Manager, чтобы Обучить нейронные сети параллельно.
Чтобы запустить один суд над экспериментом за один раз, на панели инструментов Experiment Manager, нажимают Run.
Чтобы запустить несколько испытаний одновременно, нажмите Use Parallel и затем Запуск. Если нет никакого текущего параллельного пула, Experiment Manager запускает тот с помощью кластерного профиля по умолчанию. Experiment Manager затем выполняет несколько одновременных испытаний, в зависимости от количества параллельных доступных рабочих.
Таблица результатов показывает учебную потерю и точность валидации для каждого испытания.
В то время как эксперимент запускается, нажмите Training Plot, чтобы отобразить учебный график и отследить прогресс каждого испытания.
Чтобы найти лучший результат для вашего эксперимента, отсортируйте таблицу результатов точностью валидации.
Укажите на столбец ValidationAccuracy.
Кликните по треугольному значку.
Выберите Sort в порядке убывания.
Испытание с самой высокой точностью валидации появляется наверху таблицы результатов.
Чтобы визуально проверять, идентифицирует ли сеть правильно подобные и отличающиеся пары:
Выберите испытание с самой высокой точностью.
На панели инструментов Experiment Manager нажмите Export.
В диалоговом окне введите имя переменной рабочей области для экспортируемого учебного выхода. Именем по умолчанию является trainingOutput
.
Протестируйте сеть на маленьком пакете пар изображений путем вызова displayTestSet
функция. Используйте экспортируемый учебный выход в качестве входа к функции. Например, в командном окне MATLAB, введите:
displayTestSet(trainingOutput)
Функция отображает 10 случайным образом выбранных пар тестовых изображений с предсказанием от обучившего сеть, счета вероятности и метки, указывающей, является ли предсказание правильным или неправильным.
Чтобы записать наблюдения о результатах вашего эксперимента, добавьте аннотацию.
В таблице результатов щелкните правой кнопкой по ячейке ValidationAccuracy лучшего испытания.
Выберите Add Annotation.
В панели Аннотаций введите свои наблюдения в текстовое поле.
Для получения дополнительной информации смотрите сортировку, Фильтр, и Аннотируйте Результаты Эксперимента.
В панели Браузера Эксперимента щелкните правой кнопкой по имени проекта и выберите Close Project. Experiment Manager закрывает все эксперименты и результаты, содержавшиеся в проекте.