tf.keras.model call() 方法,是否可以将方法 call() 与标签一起使用?

tf.keras.model call() method, is it possible to use method call() with labels?

这个问题困扰了我一段时间:是否可以将 tf.keras.model 的方法 call() 与标签一起使用?从我所看到的情况来看,这是不合理的,但令我感到奇怪的是,您可以使用这种方法训练模型,但不能像 .fit() 方法那样将标签传递给它。

另外,这个问题是在看tensorflow文档中制作DCGAN的教程时出现的

来源:https://www.tensorflow.org/tutorials/generative/dcgan

您可以将张量列表传递给调用函数,这样您就可以传递标签。但是,这不符合 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))