exponenta event banner

Использование диспетчера экспериментов для обучения генеративных состязательных сетей (GAN)

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

  • Генератор - учитывая вектор случайных значений (скрытых входных данных) в качестве входных данных, эта сеть генерирует данные с той же структурой, что и обучающие данные.

  • Дискриминатор - Данная сеть пытается классифицировать наблюдения как «реальные» или «сгенерированные».

Для обучения GAN одновременно обучайте обе сети, чтобы максимизировать производительность обеих сетей:

  • Обучите генератор генерировать данные, которые «обманывают» дискриминатор. Для оптимизации производительности генератора максимизируйте потери дискриминатора при предоставлении сгенерированных данных. Другими словами, целью генератора является генерирование данных, которые дискриминатор классифицирует как «реальные».

  • Обучите дискриминатор различать реальные и сгенерированные данные. Для оптимизации производительности дискриминатора минимизируйте потери дискриминатора при предоставлении партий как реальных, так и сгенерированных данных. Другими словами, цель дискриминатора - не быть «обманутым» генератором.

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

Открытый эксперимент

Сначала откройте пример. Диспетчер экспериментов загружает проект с предварительно настроенным экспериментом, который можно проверить и запустить. Чтобы открыть эксперимент, в панели «Обозреватель экспериментов» дважды щелкните имя эксперимента (ImageGenerationExperiment).

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

Поле Описание содержит текстовое описание эксперимента. В этом примере приводится следующее описание:

Train a generative adversarial network (GAN) to generate images of flowers.
Use hyperparameters to specify:
- the probability of the dropout layer in the discriminator network
- the fraction of real labels to flip while training the discriminator network

В разделе «Гиперпараметры» указываются значения гиперпараметров, используемые в эксперименте. При выполнении эксперимента Диспетчер экспериментов обучает сеть с использованием каждой комбинации значений гиперпараметров, указанных в таблице гиперпараметров. В этом примере используются два гиперпараметра:

  • dropoutProb устанавливает вероятность отсева уровня в сети дискриминатора. По умолчанию значения для этого гиперпараметра указаны как [0.25 0.5 0.75].

  • flipFactor задает долю реальных меток, которая будет перевернута при обучении сети дискриминатора. Эксперимент использует этот гиперпараметр, чтобы добавить шум к реальным данным и лучше сбалансировать обучение дискриминатора и генератора. В противном случае, если дискриминатор учится слишком быстро различать реальные и сгенерированные изображения, тогда генератор может не тренироваться. Значения для этого гиперпараметра указаны как [0.1 0.3 0.5].

Функция обучения определяет данные обучения, архитектуру сети, варианты обучения и процедуру обучения, используемые в эксперименте. Для проверки функции обучения в разделе Функция обучения щелкните Изменить. Функция обучения открывается в MATLAB ® Editor.

Ввод в обучающую функцию представляет собой структуру с полями из таблицы гиперпараметров и experiments.Monitor объект, который можно использовать для отслеживания хода обучения, записи значений показателей, используемых обучением, и создания графиков обучения. Функция обучения возвращает структуру, которая содержит обученную генераторную сеть, обученную дискриминаторную сеть и среду выполнения, используемую для обучения. Experiment Manager сохраняет эти выходные данные, поэтому их можно экспортировать в рабочую область MATLAB после завершения обучения. Функция обучения состоит из шести секций.

  • Параметр «Initialize Output» устанавливает начальное значение сетей на пустые массивы, указывая, что обучение не началось. Эксперимент устанавливает среду выполнения на "auto"Таким образом, он обучает сети на GPU, если он доступен. Для использования графического процессора требуется Toolbox™ параллельных вычислений и поддерживаемое устройство графического процессора. Дополнительные сведения см. в разделе Поддержка графического процессора по выпуску (Панель инструментов параллельных вычислений).

  • Данные обучения нагрузки определяют данные обучения для эксперимента как imageDatastore объект. В эксперименте используется набор данных Flowers, который содержит 3670 изображений цветов и составляет около 218 МБ. Дополнительные сведения об этом наборе данных см. в разделе Наборы данных изображений.

  • Определите Сеть Генератора, определяет архитектуру для сети генератора как график слоя, который производит изображения от множеств случайных ценностей 1 на 1 на 100. Чтобы обучить сеть с помощью пользовательского цикла обучения и включить автоматическое дифференцирование, функция обучения преобразует график уровня в dlnetwork объект.

  • Определите Сеть Дискриминатора, определяет архитектуру для сети дискриминатора как график слоя, который классифицирует реальный и произвел изображения 64 на 64 на 3. Уровень отсева использует вероятность отсева, определенную в таблице гиперпараметров. Чтобы обучить сеть с помощью пользовательского цикла обучения и включить автоматическое дифференцирование, функция обучения преобразует график уровня в dlnetwork объект.

  • Задание параметров обучения определяет параметры обучения, используемые в эксперименте. В этом примере Experiment Manager обучает сети с размером мини-партии 128 для 50 эпох, используя начальную скорость обучения 0,0002, коэффициент градиентного затухания 0,5 и коэффициент градиентного затухания в квадрате 0,999.

  • Модель поезда определяет пользовательский цикл обучения, используемый в эксперименте. Пользовательский цикл обучения использует minibatchqueue для обработки и управления мини-партиями изображений. Для каждой мини-партии minibatchqueue объект масштабирует изображения в диапазоне [-1,1], отбрасывает любые частичные мини-пакеты с менее чем 128 наблюдениями и форматирует данные изображения с метками размеров 'SSCB' (пространственный, пространственный, канальный, пакетный). По умолчанию minibatchqueue объект преобразует данные в dlarray объекты с базовым типом single. Для каждой эпохи пользовательский цикл обучения выполняет тасование хранилища данных и петель по мини-пакетам данных. При обучении на GPU данные преобразуются в gpuArray объекты. Затем обучающая функция оценивает градиенты модели и обновляет параметры дискриминатора и генератора сети. После каждой итерации пользовательского цикла обучения функция обучения сохраняет обученные сети и обновляет ход обучения.

Обучение GAN может быть сложной задачей, потому что генератор и дискриминаторные сети конкурируют друг с другом во время обучения. Если одна сеть учится слишком быстро, то другая сеть может не учиться. Чтобы помочь вам диагностировать проблемы и контролировать, насколько хорошо генератор и дискриминатор достигают своих соответствующих целей, этот эксперимент отображает пару баллов на графике обучения. Оценка генератора scoreGenerator измеряет вероятность того, что дискриминатор может правильно различать сгенерированные изображения. Оценка дискриминатора scoreDiscriminator измеряет вероятность того, что дискриминатор может правильно различать все входные изображения, предполагая, что числа реальных и сгенерированных изображений, переданных дискриминатору, равны. В идеальном случае обе оценки равны 0,5. Баллы, которые слишком близки к нулю, или один из них может указывать на то, что одна сеть доминирует над другой. См. раздел Мониторинг хода обучения GAN и определение режимов общих отказов.

Чтобы помочь вам решить, какое испытание дает наилучшие результаты, этот эксперимент объединяет оценку генератора и оценку дискриминатора в одно числовое значение, scoreCombined. Эта метрика использует L-∞ норму для определения того, насколько близки эти два сетевого графика к идеальному сценарию. Значение равно единице, если обе оценки сети равны 0,5, и нулю, если одна из оценок сети равна нулю или единице.

Запустить эксперимент

При выполнении эксперимента Диспетчер экспериментов многократно обучает сеть, определенную функцией обучения. В каждом испытании используется различная комбинация значений гиперпараметров. По умолчанию Experiment Manager запускает по одной пробной версии. При наличии панели инструментов Parallel Computing Toolbox можно выполнять несколько пробных версий одновременно. Чтобы получить наилучшие результаты, перед запуском эксперимента запустите параллельный пул с таким количеством работников, как GPU. Дополнительные сведения см. в разделе Использование диспетчера экспериментов для параллельного обучения сетей.

  • Чтобы запустить одну пробную версию эксперимента за один раз, на панели инструментов Диспетчера экспериментов нажмите кнопку Выполнить.

  • Чтобы запустить несколько пробных версий одновременно, щелкните Использовать параллельное, а затем Выполнить. Если текущий параллельный пул отсутствует, диспетчер экспериментов запускает его с использованием профиля кластера по умолчанию. Затем Experiment Manager выполняет несколько одновременных испытаний в зависимости от количества доступных параллельных работников.

Таблица результатов показывает потерю обучения и точность проверки для каждого испытания.

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

Оценка результатов

Чтобы найти наилучший результат для эксперимента, отсортируйте таблицу результатов, используя комбинированный балл.

  1. Укажите на scoreCombined колонку.

  2. Щелкните значок треугольника.

  3. Выберите Сортировка в порядке убывания.

Испытание с наивысшим комбинированным баллом появляется в верхней части таблицы результатов.

Оцените качество GAN путем генерации и проверки изображений, созданных обученным генератором.

  1. Выберите пробную версию с наивысшим комбинированным баллом.

  2. На панели инструментов Диспетчера экспериментов щелкните Экспорт (Export).

  3. В диалоговом окне введите имя переменной рабочего пространства для экспортируемых результатов обучения. Имя по умолчанию: trainingOutput.

  4. Проверьте обученную сеть генератора путем вызова generateTestImages функция. Используйте экспортированные выходные данные обучения в качестве входных данных функции. Например, в окне команд MATLAB введите:

generateTestImages(trainingOutput)

Функция создает пакет из 25 случайных векторов для ввода в генераторную сеть и отображает полученные изображения.

Использование комбинированного балла для сортировки результатов может не определить лучшее испытание во всех случаях. Для достижения наилучших результатов повторите этот процесс для каждого испытания с высокой комбинированной оценкой, визуально проверяя, что генератор производит множество изображений без множества дубликатов. Если изображения имеют небольшое разнообразие и некоторые из них почти идентичны, то на ваш генератор, вероятно, влияет коллапс режима. Дополнительные сведения см. в разделе Свертывание режима.

Чтобы записать наблюдения о результатах эксперимента, добавьте аннотацию.

  1. В таблице результатов щелкните правой кнопкой мыши по scoreCombined клетке для лучшего испытания.

  2. Выберите «Добавить аннотацию».

  3. На панели Аннотации (Annotations) введите данные наблюдений в текстовое поле.

Дополнительные сведения см. в разделе Сортировка, фильтрация и аннотирование результатов эксперимента.

Эксперимент повторного запуска

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

  1. Вернитесь на панель определения эксперимента.

  2. В таблице гиперпараметров введите значения гиперпараметров, полученные в лучшем испытании. Например, чтобы использовать значения из пробной версии 2, измените значение dropoutProb кому 0.5 и flipFactor кому 0.1.

  3. Откройте функцию обучения и укажите более длительное время обучения. В разделе Задать параметры обучения измените значение numEpochs кому 500.

  4. Запустите эксперимент, используя новые значения гиперпараметров и обучающую функцию. Experiment Manager запускает одну пробную версию. Обучение занимает примерно в 10 раз больше времени, чем предыдущие испытания.

  5. По завершении эксперимента экспортируйте результаты обучения и выполните команду generateTestImages для тестирования новой генераторной сети. Как и прежде, визуально проверьте, что генератор производит множество изображений без множества дубликатов.

Близкий эксперимент

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

См. также

Приложения

Объекты

Связанные темы