GAN学习手册(一)对训练normal distribution的解读
原文章及代码:
https://towardsdatascience.com/training-a-gan-to-sample-from-the-normal-distribution-4095a11e78de
在这边文章中,我们的generator和discriminator的目标不同。
generator:把随机数训练成正态分布。
discriminator:在含有一半真实数据和一半generator的结果数据的数据集中作区分。
下面我们拆分每个部分的代码做一个详细的解读。
def uniform_to_normal(z):
'''
Map a value from ~U(-1, 1) to ~N(0, 1)
'''
norm = stats.norm(0, 1)
return norm.ppf((z+1)/2)
在这里,norm是表示均值是0,方差是1的正态分布,return的是F(x)=(z+1)/2时的x值。
def generate_noise(samples, dimensions=2):
'''
Generate a matrix of random noise in [-1, 1] with shape (samples, dimensions)
'''
return np.random.uniform(-1, 1, (samples, dimensions))
这里我们return了大小为sample*2在间隔[-1,1]的随机数。
知识点⚠️:shape(高维>2,行数,列),当数组中存在2组2张3行4列的表时,数据就是4维,shape返回(2,2,3,4)。
更多关于维度细节
def build_generator(LATENT_DIM, output_dim):
'''
Build a generator mapping (R, R) to ([-1,1], [-1,1])
'''
input_layer = layers.Input((LATENT_DIM,))
X = input_layer
for i in range