Керас вопрос про тренировки с замерзшими слоями - PullRequest
0 голосов
/ 27 июня 2019

Итак, я прохожу этот учебник GAN, и автор устанавливает discriminator следующим образом:

model_discriminator = Sequential()
model_discriminator.add(net_discriminator)

, где net_discriminator - другая Sequential модель..

Затем он настраивает модель adversarial следующим образом:

model_adversarial = Sequential()
model_adversarial.add(net_generator)

# Disable layers in discriminator
for layer in net_discriminator.layers:
    layer.trainable = False

model_adversarial.add(net_discriminator)

, где net_generator - другая модель sequential.

Обе модели обучаются вв то же время, используя train_on_batch.

Что я не понимаю, так это то, как веса net_discriminator части model_adversarial обновляются при обучении model_discriminator.Для меня это две отдельные сети, и обучение одной модели, содержащей слои net_discriminator, не должно влиять на другую.Кроме того, слои заморожены в модели adversarial, поэтому это не должно помешать их обучению?

Может ли кто-нибудь дать мне объяснение более низкого уровня, как это работает?Спасибо!

1 Ответ

0 голосов
/ 27 июня 2019

Ответ на ваш первый вопрос уже дан автором учебника в следующих строках, где он говорит:

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

Итак, я думаю, как он создает модель model_discriminator с помощьюдобавление модели net_discriminator к слою new Sequential() является причиной того, как веса части net_discriminator в model_adversarial обновляются при обучении model_discriminator, так как во время обучения model_discriminator это на самом деле net_discriminator частьоб этом, который обучается.

Ответ на второй вопрос:

Согласно автору,

Если бы мы использовали нормальное обратное распространение здесь на полном состязанииВ модели мы медленно подталкивали дискриминатор к обновлению и начинали классифицировать поддельные изображения как реальные.А именно, целевой вектор модели состязательности состоит из всех.Чтобы предотвратить это, мы должны заморозить ту часть модели, которая принадлежит дискриминатору.

Итак, приведенное выше объяснение автора ясно указывает на то, почему мы хотим заморозить слои дискриминаторной части неблагоприятной модели.Модель adverserial содержит сети generator и discriminator.Модель adverserial использует случайный шум в качестве входных данных и выводит возможный прогноз discriminator на сгенерированных изображениях.Итак, здесь уже обученная discriminator сеть используется только для прогнозирования, нет необходимости привлекать ее к обучению.

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