【问题标题】:Running training the discriminator with more examples用更多的例子来训练判别器
【发布时间】:2020-06-26 11:23:27
【问题描述】:

据我了解,常规 GAN 与 WGAN 之间的区别在于,我们在每个 epoch 中使用更多示例来训练鉴别器/批评者。如果在常规 GAN 中,我们在每个 epoch 中都有一个批次用于两个模块,那么在 WGAN 中,我们将有 5 个批次(或更多)用于鉴别器,一个用于生成器。

所以基本上我们有另一个判别器的内部循环:

real_images_labels = np.ones((BATCH_SIZE, 1))
 fake_images_labels = -real_images_labels
 for epoch in range(epochs):
    for batch in range(NUM_BACHES):
        for critic_iter in range(n_critic):
        random_batches_idx = np.random.randint(0, NUM_BACHES) # Choose random batch from dataset
        imgs_data=dataset_list[random_batches_idx]
        c_loss_real = critic.train_on_batch(imgs_data, real_images_labels) # update the weights after 1 batch

        noise = tf.random.normal([imgs_data.shape[0], noise_dim]) # Generate noise data
        generated_images = generator(noise, training=True)
        c_loss_fake = critic.train_on_batch(generated_images, fake_images_labels)  # update the weights after 1 batch
      
    
      imgs_data=dataset_list[batch]
      noise = tf.random.normal([imgs_data.shape[0], noise_dim]) # Generate noise data
      gen_loss_batch = gen_loss_batch + gan.train_on_batch(noise,real_images_labels)

训练花费了我很多时间,每个 epoch 大约 3m。我不得不减少训练时间的想法是为每个批次向前运行 n_critic 次,我可以增加鉴别器的 batch_size 并使用更大的 batch_size 向前运行一次。

我正在寻求反馈:这听起来合理吗?

(我没有粘贴我的整个代码,它只是其中的一部分)。

【问题讨论】:

    标签: tensorflow keras generative-adversarial-network


    【解决方案1】:

    是的,这听起来确实合理,通常在训练期间增加 batch_size,通常会以使用更多内存降低准确度为代价来减少训练时间> (泛化能力较低)

    话虽如此,您应该始终对批处理进行反复试验,因为极端值可能会或可能不会增加训练时间。

    更多讨论可以参考这个question

    【讨论】:

    • 首先感谢您的回答。如果我增加批量大小,我将有更少的权重更新。通过迭代,我会多次更新权重,并且每次更新都是较小的批次。会有什么取舍?
    • 是的,正是因为您增加了批量大小,权重将更新得更少,从而导致准确性降低。与大批量相比,小批量的更多迭代将产生更准确的模型,但训练时间更长。假设没有内存限制,权衡将是准确性与时间。
    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 2020-08-11
    • 1970-01-01
    • 2012-10-22
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多