【问题标题】:GAN generates exactly the same Images cross a batch only because of seeds distribution, Why?GAN 仅因为种子分布而跨批次生成完全相同的图像,为什么?
【发布时间】:2021-03-15 05:44:22
【问题描述】:

我已经训练了一个 GAN 来重现类似 CIFAR10 的图像。最初我注意到生成器生成的一批图像看起来总是一样的,如下图所示:

经过数小时的调试和比较,该教程是一个很好的初学者学习资源 (https://machinelearningmastery.com/how-to-develop-a-generative-adversarial-network-for-a-cifar-10-small-object-photographs-from-scratch/),我只在我的原始代码上添加了一个字母并且生成的图像开始看起来正常(每个批次开始看起来彼此不同),如下图所示:

代码上神奇的一个字符更改是进行以下更改:

更改自:

def generate_latent_points(self, n_samples):
        return np.random.rand(n_samples, self.latent_dim)

到:

def generate_latent_points(self, n_samples):
        return np.random.randn(n_samples, self.latent_dim)

希望这个非常微妙的细节可以帮助那些花费数小时为 GAN 训练过程摸不着头脑的人。

np.random.rand[0, 1) 上提供均匀分布

np.random.randn 给出均值为 0 和方差为 1 的单变量“正态”(高斯)分布

那么为什么生成器的潜在种子分布差异会表现得如此不同?

【问题讨论】:

    标签: python neural-network conv-neural-network generative-adversarial-network


    【解决方案1】:

    我能想到的可能原因可能很少:

    1. 这两者的分布差异有两个折叠: 1.rand 只给出正值,而randn0 周围给出负值和正值; 2. rand 给出比randn 更大的值,原因很明显。更大的幅度可能会导致学习不稳定,因为 dL/dw(与 x 成正比)将大于 randn 的情况。

    2. 生成器的不成功学习对判别器区分真假图像没有任何挑战,因此判别器没有学习任何新东西。 (这是我在训练过程中对判别器的loss和acc的观察)

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 2021-05-17
      • 2020-03-17
      • 1970-01-01
      • 2021-02-12
      • 2015-11-06
      • 2014-04-11
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多