GAN 的随机噪声
Random noise for GAN
我是 GAN 新手。我正在学习对 GAN 进行建模以生成图像,但是我真的不明白提供给生成器的随机噪声到底是什么。它是从 0 到 1 的随机数吗,它的大小应该是多少。每次生成器 运行?
时,随机噪声也应该保持不变吗?
如有任何帮助,我们将不胜感激。
随机噪声是一个特征向量,对每张图像都是唯一的
让我们考虑 128 的噪声向量
现在只关注向量中的第一个条目
让我们考虑一下头上头发的长度
从训练图像模型了解到,对于秃头,该值为=0,对于长发,值为=1,通过选择从 0 到 1 的随机数来决定头发的数量。
所以模型可以生成不同头发长度的人
这样随机噪声中的所有128个条目将决定人脸的一个因素
这就是为什么每次选择随机噪声都会产生新的人像
如果您每次都使用相同的随机噪声,那么模型将生成相同的图像
希望您了解 GAN 的工作原理。
随机噪声向量分布表示潜在 space。这对 GAN 来说并不重要,但对自动编码器来说更重要。通常,噪声是由正态分布产生的,但一些研究人员报告说使用球形分布可以改善训练结果(抱歉,我手头没有参考资料)。噪声的范围取决于您的输入层。如果您使用的是图像,您可能会在 0 和 1 或 -1 和 1 之间对输入进行归一化,因此您将为噪声向量使用相应的分布范围。可能会像这样生成典型的噪声向量:
noise = tf.random.normal([BATCH_SIZE, noise_dim])
其中 BATCH_SIZE 是训练批次的大小(16、32、64、128...),noise_dim 是噪声向量的大小,这取决于您的特征 space(我经常将 1024 用于中分辨率图像)。
我也是 GAN 的新手,但最近在研究 GAN 的信号生成。
随机噪声是生成器的输入。一开始它没有任何意义,通过训练你会尝试为他们找到意义。关于尺寸,我仍然不确定我的结论是否正确,所以如果我错了,我希望其他人纠正我。我们应该为我们的问题寻找合适的大小。
如果 latent space 非常小,模型将达到无法再产生更好质量的程度(瓶颈),如果它太大,模型将需要很长时间才能产生良好的结果,甚至可能无法收敛。通常一个人从潜在的 space 大小开始,其他人使用相同的问题。
github 上有一个 jupyter notebook 驱动 tutorial(完全公开,这是我的 github)。
(可用的解决方案 here)
噪声或更确切地说是潜在的随机变量可以很容易地生成,例如如下所示:
# Generate latent random variable to feed to the generator, by drawing from a uniform distribution
z = np.random.uniform(-1., 1., size=[batch_size, noise_dim])
然而,考虑生成器输入层内的激活函数并注意其敏感范围是有意义的。
生成器将此输入作为种子,从该潜在变量解码到源数据集域。所以很明显,相同的随机变量将导致完全相同的生成样本。
所以你应该在训练的时候不断地抽取新的样本,不要保持噪声不变。
随机向量实际上不是随机的,通常我们从某些特定分布(高斯分布、均匀分布等)中对向量进行采样。生成器获取采样向量,然后尝试通过最小化采样向量的概率分布和所有训练数据的分布的 Jensen-Shannon 散度,将其映射到训练数据的分布。
我们提供给生成器的采样向量的大小是一个超参数。
我是 GAN 新手。我正在学习对 GAN 进行建模以生成图像,但是我真的不明白提供给生成器的随机噪声到底是什么。它是从 0 到 1 的随机数吗,它的大小应该是多少。每次生成器 运行?
时,随机噪声也应该保持不变吗?如有任何帮助,我们将不胜感激。
随机噪声是一个特征向量,对每张图像都是唯一的
让我们考虑 128 的噪声向量
现在只关注向量中的第一个条目 让我们考虑一下头上头发的长度
从训练图像模型了解到,对于秃头,该值为=0,对于长发,值为=1,通过选择从 0 到 1 的随机数来决定头发的数量。 所以模型可以生成不同头发长度的人
这样随机噪声中的所有128个条目将决定人脸的一个因素
这就是为什么每次选择随机噪声都会产生新的人像
如果您每次都使用相同的随机噪声,那么模型将生成相同的图像
希望您了解 GAN 的工作原理。
随机噪声向量分布表示潜在 space。这对 GAN 来说并不重要,但对自动编码器来说更重要。通常,噪声是由正态分布产生的,但一些研究人员报告说使用球形分布可以改善训练结果(抱歉,我手头没有参考资料)。噪声的范围取决于您的输入层。如果您使用的是图像,您可能会在 0 和 1 或 -1 和 1 之间对输入进行归一化,因此您将为噪声向量使用相应的分布范围。可能会像这样生成典型的噪声向量:
noise = tf.random.normal([BATCH_SIZE, noise_dim])
其中 BATCH_SIZE 是训练批次的大小(16、32、64、128...),noise_dim 是噪声向量的大小,这取决于您的特征 space(我经常将 1024 用于中分辨率图像)。
我也是 GAN 的新手,但最近在研究 GAN 的信号生成。
随机噪声是生成器的输入。一开始它没有任何意义,通过训练你会尝试为他们找到意义。关于尺寸,我仍然不确定我的结论是否正确,所以如果我错了,我希望其他人纠正我。我们应该为我们的问题寻找合适的大小。 如果 latent space 非常小,模型将达到无法再产生更好质量的程度(瓶颈),如果它太大,模型将需要很长时间才能产生良好的结果,甚至可能无法收敛。通常一个人从潜在的 space 大小开始,其他人使用相同的问题。
github 上有一个 jupyter notebook 驱动 tutorial(完全公开,这是我的 github)。 (可用的解决方案 here)
噪声或更确切地说是潜在的随机变量可以很容易地生成,例如如下所示:
# Generate latent random variable to feed to the generator, by drawing from a uniform distribution
z = np.random.uniform(-1., 1., size=[batch_size, noise_dim])
然而,考虑生成器输入层内的激活函数并注意其敏感范围是有意义的。
生成器将此输入作为种子,从该潜在变量解码到源数据集域。所以很明显,相同的随机变量将导致完全相同的生成样本。
所以你应该在训练的时候不断地抽取新的样本,不要保持噪声不变。
随机向量实际上不是随机的,通常我们从某些特定分布(高斯分布、均匀分布等)中对向量进行采样。生成器获取采样向量,然后尝试通过最小化采样向量的概率分布和所有训练数据的分布的 Jensen-Shannon 散度,将其映射到训练数据的分布。 我们提供给生成器的采样向量的大小是一个超参数。