GAN 的生成器梯度为 None

时间:2021-01-19 13:54:45

标签: python tensorflow2.0 gradient tf.keras generative-adversarial-network

我正在研究一个 GAN,它获取形状为 (batch_size, 10) 的随机种子并返回形状为 (batch_size, 50) 的张量。
当我尝试训练生成器时,它的梯度始终为 None。
我尝试冻结判别器参数并训练一个包含生成器和判别器的模型,我也尝试为生成器编写自定义训练函数,但都失败了。

这是我训练生成器的代码:

@tf.function
def TrainGenerator(generator, discriminator, optimizer):
    X_gan = tf.random.uniform((32, 10))
    y_gan = tf.ones((32, 1))

    with tf.GradientTape() as tape:
        y_pred = discriminator(generator(X_gan, training=True), training=False)
        main_loss = tf.reduce_mean(keras.losses.binary_crossentropy(y_gan, y_pred))
        loss = tf.add_n([main_loss] + generator.losses)
    gradients = tape.gradient(loss, generator.trainable_variables)
    optimizer.apply_gradients(zip(gradients, generator.trainable_variables))

    return loss

这是我得到的错误:

ValueError: No gradients provided for any variable:

感谢您的帮助。

0 个答案:

没有答案