В этом примере показано, как создать пользовательский учебный эксперимент для обучения сиамской сети, которая идентифицирует похожие изображения рукописных символов. Для пользовательского обучающего эксперимента явно определяется процедура обучения, используемая диспетчером экспериментов. В этом примере реализуется индивидуальный цикл обучения для обучения сиамской сети, типа сети глубокого обучения, которая использует две или более идентичных подсетей, имеющих одинаковую архитектуру и совместно использующих одни и те же параметры и веса. Некоторые распространенные приложения для сиамских сетей включают распознавание лиц, проверку подписи и идентификацию перефразирования.
Эта схема иллюстрирует архитектуру сети Siamese в этом примере.

Для сравнения двух изображений каждое изображение проходит через одну из двух одинаковых подсетей, имеющих общий вес. Подсети преобразовывают каждое изображение 105 на 105 на 1 в 4096-мерный вектор особенности. Изображения того же класса имеют сходные 4096-мерные представления. Векторы выходных признаков из каждой подсети объединяются посредством вычитания, и результат передается через fullyconnect работа с одним выходом. Сигмоидальная операция преобразует это значение в вероятность, указывающую, что изображения похожи (когда вероятность близка к 1) или отличаются (когда вероятность близка к 0). Двоичная потеря перекрестной энтропии между предсказанием сети и истинной меткой обновляет сеть во время обучения. Дополнительные сведения см. в разделе Подготовка сиамской сети для сравнения изображений.
Сначала откройте пример. Диспетчер экспериментов загружает проект с предварительно настроенным экспериментом, который можно проверить и запустить. Чтобы открыть эксперимент, в панели «Обозреватель экспериментов» дважды щелкните имя эксперимента (ImageComparisonExperiment).

Пользовательские обучающие эксперименты состоят из описания, таблицы гиперпараметров и обучающей функции. Дополнительные сведения см. в разделе Настройка пользовательского эксперимента обучения.
Поле Описание содержит текстовое описание эксперимента. В этом примере приводится следующее описание:
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.
В разделе «Гиперпараметры» указываются значения гиперпараметров, используемые в эксперименте. При выполнении эксперимента Диспетчер экспериментов обучает сеть с использованием каждой комбинации значений гиперпараметров, указанных в таблице гиперпараметров. В этом примере используются гиперпараметры WeightsInitializer и BiasInitializer для задания инициализаторов веса и смещения, соответственно, для свёртки и полностью соединенных уровней в каждой подсети. Дополнительные сведения об этих инициализаторах см. в разделе WeightsInitializer и BiasInitializer.
Функция обучения определяет данные обучения, архитектуру сети, варианты обучения и процедуру обучения, используемые в эксперименте. Для проверки функции обучения в разделе Функция обучения щелкните Изменить. Функция обучения открывается в MATLAB ® Editor.
Ввод в обучающую функцию представляет собой структуру с полями из таблицы гиперпараметров и объект, который можно использовать для отслеживания хода обучения, записи значений показателей, используемых обучением, и создания графиков обучения. Функция обучения возвращает структуру, которая содержит обученный сетевой график, весовые коэффициенты для конечного experiments.Monitorfullyconnect для сети и среды выполнения, используемой для обучения. Experiment Manager сохраняет эти выходные данные, поэтому их можно экспортировать в рабочую область MATLAB после завершения обучения. Функция обучения состоит из пяти секций.
Initialize Output задает начальное значение сети и fullyconnect весит пустые массивы, указывая, что обучение не началось. Эксперимент устанавливает среду выполнения на "auto"таким образом, он обучает и проверяет сеть на GPU, если она доступна. Для использования графического процессора требуется Toolbox™ параллельных вычислений и поддерживаемое устройство графического процессора. Дополнительные сведения см. в разделе Поддержка графического процессора по выпуску (Панель инструментов параллельных вычислений).
Данные обучения и тестирования по нагрузкам и препроцессам определяют данные обучения и испытаний для эксперимента как imageDatastore объекты. В эксперименте используется набор данных Omniglot, который состоит из наборов символов для 50 алфавитов, разделённых на 30 наборов для обучения и 20 наборов для тестирования. Дополнительные сведения об этом наборе данных см. в разделе Наборы данных изображений.
Определите Сетевую Архитектуру, определяет архитектуру для двух идентичных подсетей, которые принимают изображения 105 на 105 на 1 и производят вектор особенности. В свертке и полностью соединенных слоях используются инициализаторы весов и смещения, указанные в таблице гиперпараметров. Чтобы обучить сеть с помощью пользовательского цикла обучения и включить автоматическое дифференцирование, функция обучения преобразует график уровня в dlnetwork объект. Веса для финала fullyconnect операции инициализируются выборкой случайного выбора из узкого нормального распределения со стандартным отклонением 0,01.
Задание параметров обучения определяет параметры обучения, используемые в эксперименте. В этом примере Диспетчер экспериментов обучает сеть с размером мини-пакета 180 для 1000 итераций, вычисляя точность сети каждые 100 итераций. Обучение может занять некоторое время. Для достижения лучших результатов рассмотрите возможность увеличения уровня обучения до 10 000 итераций.
Модель поезда определяет пользовательский цикл обучения, используемый в эксперименте. Для каждой итерации пользовательский учебный цикл извлекает пакет пар изображений и меток, преобразует данные в dlarray объекты с одним базовым типом и задающие метки размеров 'SSCB' (пространственные, пространственные, канальные, пакетные) для данных изображения и 'CB' (канал, партия) для этикеток. При обучении на GPU данные преобразуются в gpuArray объекты. Затем обучающая функция оценивает градиенты модели и обновляет параметры сети. Для проверки обучающая функция создает набор из пяти случайных мини-пакетов тестовых пар, оценивает предсказания сети и вычисляет среднюю точность по мини-пакетам. После каждой итерации пользовательского цикла обучения функция обучения сохраняет обученную сеть и весовые коэффициенты для fullyconnect , регистрирует потерю обучения и обновляет ход обучения.
При выполнении эксперимента Диспетчер экспериментов многократно обучает сеть, определенную функцией обучения. В каждом испытании используется различная комбинация значений гиперпараметров. По умолчанию Experiment Manager запускает по одной пробной версии. При наличии панели инструментов Parallel Computing Toolbox можно выполнять несколько пробных версий одновременно. Чтобы получить наилучшие результаты, перед запуском эксперимента запустите параллельный пул с таким количеством работников, как GPU. Дополнительные сведения см. в разделе Использование диспетчера экспериментов для параллельного обучения сетей.
Чтобы запустить одну пробную версию эксперимента за один раз, на панели инструментов Диспетчера экспериментов нажмите кнопку Выполнить.
Чтобы запустить несколько пробных версий одновременно, щелкните Использовать параллельное, а затем Выполнить. Если текущий параллельный пул отсутствует, диспетчер экспериментов запускает его с использованием профиля кластера по умолчанию. Затем Experiment Manager выполняет несколько одновременных испытаний в зависимости от количества доступных параллельных работников.
Таблица результатов показывает потерю обучения и точность проверки для каждого испытания.

Во время выполнения эксперимента щелкните Обучающий график (Training Plot), чтобы отобразить обучающий график и отслеживать ход выполнения каждого испытания.

Чтобы найти наилучший результат для эксперимента, отсортируйте таблицу результатов по точности проверки.
Указывает на столбец ValidationAccuracy.
Щелкните значок треугольника.
Выберите Сортировка в порядке убывания.
Проба с самой высокой точностью проверки отображается в верхней части таблицы результатов.

Чтобы визуально проверить, правильно ли сеть идентифицирует сходные и разнородные пары:
Выберите пробную версию с максимальной точностью.
На панели инструментов Диспетчера экспериментов щелкните Экспорт (Export).
В диалоговом окне введите имя переменной рабочего пространства для экспортируемых результатов обучения. Имя по умолчанию: trainingOutput.
Протестируйте сеть на небольшом пакете пар образов путем вызова displayTestSet функция. Используйте экспортированные выходные данные обучения в качестве входных данных функции. Например, в окне команд MATLAB введите:
displayTestSet(trainingOutput)
Функция отображает 10 случайно выбранных пар тестовых изображений с предсказанием из обученной сети, оценкой вероятности и меткой, указывающей, является ли предсказание правильным или неправильным.

Чтобы записать наблюдения о результатах эксперимента, добавьте аннотацию.
В таблице результатов щелкните правой кнопкой мыши ячейку ValidationAccuracy лучшей пробной версии.
Выберите «Добавить аннотацию».
На панели Аннотации (Annotations) введите данные наблюдений в текстовое поле.

Дополнительные сведения см. в разделе Сортировка, фильтрация и аннотирование результатов эксперимента.
На панели «Обозреватель экспериментов» щелкните правой кнопкой мыши имя проекта и выберите «Закрыть проект». Менеджер экспериментов закрывает все эксперименты и результаты, содержащиеся в проекте.