Запутался в тензорном потоке feed_dict со значением 'z', а не feed - PullRequest
0 голосов
/ 09 сентября 2018

В последнее время я пишу код 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, который является вектором реальной стоимости.Я так смущен этим.Спасибо всем.

1 Ответ

0 голосов
/ 09 сентября 2018

Объект self.z является tf.placeholder. Если вы выполняете операцию в своем сеансе, которая зависит от этого заполнителя, тензор потока нуждается в значении для этого заполнителя для выполнения реальных вычислений.

Давайте посмотрим на выполняемые вами операции: 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.

...