我正在尝试重现deep video portrait (2018),他们正在引用实现patchGAN的Isola (2017)。
在patchGAN中,判别器返回张量的[batch_size, patch_width, patch_height, 1]
,我想将此张量馈送到我的损失定义如下:
EcGAN = tf.reduce_mean(tf.log(D_real)+ tf.log(np.float32(1. - D_fake)))
因此,我包括以下伪操作检查器并运行:
sheudo_input = tf.Variable(np.float32(np.random.uniform(low=-1., high=1., size=[16, 30, 30, 1])))
EcGAN = tf.reduce_mean(tf.log(sheudo_input)+ tf.log(np.float32(1. - sheudo_input)))
但是EcGAN
没有计算出来,并报出这样的错误:
ValueError: setting an array element with a sequence.
可能的问题是什么,如何解决?
答案 0 :(得分:2)
np.float32
调用是问题所在。除非在急切的执行模式下,否则Numpy函数无法与张量配合使用。
尝试投射时,应使用tf.cast
。或者在这种情况下,结果应该是浮点数 ,所以这就足够了:
tf.log(sheudo_input) + tf.log(1. - sheudo_input)