Требуется ли многократный проход при обучении GAN в Keras для оптимизации генератора и дискриминатора? - PullRequest
8 голосов
/ 10 июля 2019

Я больше знаком с обучением графа тензорного потока, чем с Keras, но я пробую Keras здесь.

При создании GAN генератор должен быть оптимизирован против другой потери, чем дискриминатор (противоположная потеря).В базовом тензорном потоке это достаточно просто реализовать, используя либо 2 оптимизатора, либо вызывая optimizer.compute_gradients(...) и optimizer.apply_gradients(...) отдельно с соответствующей группой весов.

В Керасе я не вижу, что я могу достичьиз этих.В реализациях, таких как Keras-GAN , оказывается, что обучение генератора и дискриминатора разделено на отдельные модели и затем обучается независимо от партии к партии.Это означает, что для эффективного обновления требуется гораздо больше проходов, чем для реализации базового тензорного потока с двумя оптимизаторами, работающими за один проход.

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

TF 1.14

1 Ответ

1 голос
/ 16 июля 2019

Это действительно сложный вопрос для Кераса по нескольким причинам:

  1. Модель может иметь только один оптимизатор ... необходимо изменить исходный код, чтобы он принимал два или более

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

  3. Механизмы обучения не легко найти в коде. Вещи разбросаны повсюду, поддерживая многие вещи, такие как веса потерь, веса выборки и т. Д. Время, которое потребуется для суммирования всего, а затем решения, что делать / изменять, будет слишком большим.

Ответить на предложение

Сделайте свою модель в Керасе, как вы бы. Дискриминатор, генератор, их соединения и выходы.

Только не компилируйте это. Вместо этого следите за основными тензорами (выход генератора, выход дискриминатора, вход генератора), создавайте функции потерь в стиле Tensorflow и обучайте все в стиле tenorflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...