【问题标题】:tf.keras.model call() method, is it possible to use method call() with labels?tf.keras.model call() 方法,是否可以将方法 call() 与标签一起使用?
【发布时间】:2021-12-04 01:55:24
【问题描述】:
【问题讨论】:
标签:
python
tensorflow
keras
generative-adversarial-network
【解决方案1】:
您可以将张量列表传递给调用函数,因此您可以传递标签。但是,这不在 tensorflow/Keras 训练的逻辑中。在您的示例中,基本训练程序是 train_step。输出张量首先由生成器和鉴别器调用函数计算,然后传递给计算损失的函数。这是做事的标准方式:
def train_step(images):
noise = tf.random.normal([BATCH_SIZE, noise_dim])
with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:
generated_images = generator(noise, training=True)
real_output = discriminator(images, training=True)
fake_output = discriminator(generated_images, training=True)
gen_loss = generator_loss(fake_output)
disc_loss = discriminator_loss(real_output, fake_output)
gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)
gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)
generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))
discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))