我正在研究https://github.com/AshishBora/csgm中的代码,并在使用np.random.normal而不是tf.random_normal
初始化tf.Variable
时遇到一些奇怪的行为。更具体:
代替
z = tf.Variable(tf.random_normal((batch_size, hparams.n_z)), name='z')
我有
# in mnist_vae/src/model_def.py, line 74
z = tf.Variable(np.random.normal(size=(batch_size,
hparams.n_z)).astype('float32'), name='z')
z是变量,它是通过Adam优化器针对目标进行优化的。
背景知识:有一个预训练的神经网络G,其输入z使用tf.random_normal从标准正态分布中提取。对于给定的z*
,人们想求解ẑ= argmin_z ||AG(z)-AG(z*)||
并检查重构错误||G(ẑ)-G(z*)||
。即将到来的最小值c(z*)=||G(ẑ)-G(z*)||
对于几个不同的z*
来说,在值c1附近相当稳定。现在,我不确定优化(Adam优化器)是否会使用z来自标准正态分布的信息。因此,我用tf.random_normal
代替了np.random_normal
,希望优化程序那时不能使用这些信息。 (请参见上面的代码)
不幸的是,使用np.random.normal: c(z*)=||G(ẑ)-G(z*)||
的结果确实是不同的,这是因为几个不同的z*
围绕一个不同的值c2
(不是c1
)稳定。如何解释呢?优化程序是否确实在优化中使用了正态分布的信息(例如,作为对数似然)?我的感觉是不,因为这只是初始化。