Должен ли я перекомпилировать свой Gan каждую партию, чтобы дискриминатор не учился?

У меня такой Ган

generator = Model(g_in, g_out)
generator.compile(...)

discriminator = Model(d_in, d_out)
discriminator.trainable = True
discriminator.compile(..)

discriminator.trainable = False

gan = Model(inputs=.., outputs=..)
gan.compile(..)

#iterate over epochs and batches, without compiling

Он учится и дает приемлемый результат. Однако я получаю предупреждение:

"keras \ engine \ training.py: 490: UserWarning: Несоответствие между тренируемыми весами и собранными тренируемыми весами, вы установили model.trainable без вызова model.compile после? '' Несоответствие между тренируемыми весами и собранными тренируемыми весами '"

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

for epoch:
  for batch:

    fakes=generator.predict_on_batch(batch)

    discriminator.trainable = True
    discriminator.compile(..)

    discriminator.train_on_batch(batch, ..)
    discriminator.train_on_batch(fakes, ..)

    discriminator.trainable = False
    discriminator.compile(..)
    gan.compile(..)

    gan.train_on_batch(batch,..)

Какой из них правильный?


person Sebastian    schedule 05.01.2019    source источник


Ответы (1)


Это ожидаемо, и нет необходимости перекомпилировать каждую партию. У Кераса есть открытая ошибка по этому поводу: https://github.com/keras-team/keras/issues/8585

В ответах есть несколько примеров того, как обойти предупреждение, я не буду их здесь повторять. Также есть ответ, который дает отличный совет о том, как убедиться, что вы действительно тренируетесь тому, чему должны заниматься, если вы не уверены в специфике своей модели: https://github.com/keras-team/keras/issues/8585#issuecomment-385729276

person tsiki    schedule 05.01.2019