Jas*_*son 5 python neural-network conv-neural-network generative-adversarial-network
我训练了一个 GAN 来重现类似 CIFAR10 的图像。最初,我注意到生成器生成的跨一批图像看起来总是相同的,如下图所示:\n
经过几个小时的调试和与教程的比较,这对于初学者来说是一个很好的学习资源(https://machinelearningmastery.com/how-to-develop-a-generative-adversarial-network-for-a-cifar-10-small- object-photographs-from-scratch/),我只需在原始代码上添加一个字母,生成的图像就开始看起来正常(每个批次中的每个人都开始看起来彼此不同),如下图所示:\n
代码上神奇的一个字符更改是进行以下更改:
\n更改自:
\ndef generate_latent_points(self, n_samples):\n return np.random.rand(n_samples, self.latent_dim)\nRun Code Online (Sandbox Code Playgroud)\n到:
\ndef generate_latent_points(self, n_samples):\n return np.random.randn(n_samples, self.latent_dim)\nRun Code Online (Sandbox Code Playgroud)\n希望这个非常微妙的细节可以帮助那些花费数小时绞尽脑汁进行 GAN 训练过程的人。
\nnp.random.rand给出均匀分布[0, 1)
np.random.randn给出均值 0 和方差 1 的单变量 \xe2\x80\x9cnormal\xe2\x80\x9d (高斯)分布
那么,为什么生成器的潜在种子分布差异会表现得如此不同呢?
\n我能想到的可能原因有以下几个:
这两者的分布差异有两个方面: 1.rand仅给出正值,而randn周围同时给出负值和正值0;2.由于显而易见的原因rand,给出的数值更大randn。较大的幅度可能会导致学习不稳定,因为 dL/dw (与 x 成正比)将大于 的情况randn。
生成器的不成功学习对判别器区分真假图像没有任何挑战,因此判别器没有学习任何新的东西。(这是我在训练过程中对判别器的loss和acc的观察)
| 归档时间: |
|
| 查看次数: |
2368 次 |
| 最近记录: |