使用np.random-normal而不是tf.random_normal的不同优化行为

时间:2019-04-09 13:48:08

标签: numpy tensorflow random neural-network

我正在研究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)稳定。如何解释呢?优化程序是否确实在优化中使用了正态分布的信息(例如,作为对数似然)?我的感觉是不,因为这只是初始化。

代码在https://github.com/AshishBora/csgm

中给出

0 个答案:

没有答案