最近,我自己编写Tensorflow代码,但是当我使用feed_dict来获取Tensor对象的真实值时,遇到了这样的问题。
我首先定义如下占位符,例如self.z和self.G。鉴别器是一个神经网络。
self.z = tf.placeholder(
tf.float32, [None, self.z_dim], name='z')
self.z_sum = histogram_summary("z", self.z)
self.G = tf.placeholder(tf.float32, [self.batch_size] + image_dims, name='Generated_picture')
self.real = self.discriminator(inputs)
self.fake = self.discriminator(self.G, reuse=True)
self.d_loss = tf.reduce_mean(tf.log(1 + tf.exp(-self.real)) + tf.log(1 + tf.exp(self.fake)))
self.real_sum = histogram_summary("real", self.real)
self.fake_sum = histogram_summary("fake", self.fake)
self.d_loss_sum = histogram_summary("d_loss", self.d_loss)
self.d_sum = merge_summary([self.z_sum, self.d_loss_sum, self.real_sum, self.fake_sum])
我尝试如下更新我的鉴别器。
generated_images = self.generator(self.z)
index = np.random.choice(self.batch_size*10, size=config.batch_size)
generated_images_real = self.sess.run(generated_images, feed_dict={self.z: self.sz[index]})
_, summary_str = self.sess.run([d_optim, self.d_sum],feed_dict={
self.inputs: batch_images,
self.G: generated_images_real,
self.z: self.sz[index],
})
在这种情况下,我不确定为什么我必须为self.z提供价值。我相信self.G仅取决于generate_images_real,这是一个实数值向量。我对此感到困惑。谢谢大家。
答案 0 :(得分:0)
对象self.z
是tf.placeholder
。如果您在会话中执行依赖于该占位符的操作,那么tensorflow需要该占位符的值才能执行实际计算。
让我们调查一下您运行的操作:generated_images_real = self.sess.run(generated_images...
和self.sess.run([d_optim, self.d_sum] ,...
根据self.d_sum
的定义,我们看到它取决于self.z_sum
,而后者又取决于self.z
-我们的占位符。因此,如果执行操作self.d_sum
,则必须为此占位符提供一个值。操作d_optim
也可能取决于self.z
,但此处未给出其定义。这就解释了为什么在第二条语句中我们需要self.z
的值。
在第一条语句中,generated_images
直接依赖于self.z
,因为此占位符被传递给self.generator
函数。