Tensorflow feed_dict问题

时间:2017-07-17 08:29:34

标签: python machine-learning tensorflow deep-learning

所以我是Tensorflow的新手,我正在努力了解何时使用feed_dict以及什么时候不需要。

但是,我对feed_dict的工作原理感到困惑。

例如: 1和2和3是否相同?

1. accuracy, cost = sess.run([accuracy, cost], feed_dict = {X:X_batch, Y:Y_batch})

2. accuracy  = sess.run(accuracy, feed_dict = {X:X_batch, Y: Y_batch})
   cost = sess.run(cost, feed_dict = {X:X_batch, Y:Y_batch})

3. accuracy = sess.run(accuracy, feed_dict = {X:X_batch, Y:Y_batch})
   cost = sess.run(cost)

我不知道如果tensorflow在成本和张量流图中收到相同的feed_dict,计算精度已经计算了成本,那么它是否会再次通过神经网络来评估该值,否则它将返回计算出的值而不通过再次净?

另外,由于费用已经在图表中计算出来,如果我想检索最新的计算成本,我可以像3那样做吗?

此外,来自Hvass-Labs/TensorFlow-Tutorials/TensorFlow Tutorial #02 Convolutional Neural Network

在函数plot_conv_weights(weights,input_channel = 0)

weights = sess.run(conv_weigh)

由于训练权重要求我们用占位符X和Y填充值,但在这里我没有看到feed_dict。

那么feed_dict究竟是如何运作的?

PS: 所以我在tensorflow github中问了这个问题,但他们关闭了我的问题,并告诉我tf.Session().run()是如何工作的。

根据我从文档中理解的,tf.Operation if fetched将返回None。并且tf.Operation是tensorflow图中的节点,它为两个张量进行计算。

但是,我不认为这份文件与我的问题有关......

1 个答案:

答案 0 :(得分:1)

要了解feed_dict,您需要了解TensorFlow的工作原理。在TF中,一切都是懒惰的评估。

这是一个简单的例子:

import tensorflow as tf
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
c = tf.add(a, b)

sess = tf.Session()
print(sess.run(c, feed_dict={a: 1, b: 2}))
sess.close()

从代码中可以看出,我们有两个未填充任何数字的占位符。我们的目标是计算ab的总和。通过feed_dict我们基本上用值填充它。这个概念也适用于你的问题。

关于你的问题是否相同:

1. accuracy, cost = sess.run([accuracy, cost], feed_dict = {X:X_batch, Y:Y_batch})

2. accuracy  = sess.run(accuracy, feed_dict = {X:X_batch, Y: Y_batch})
   cost = sess.run(cost, feed_dict = {X:X_batch, Y:Y_batch})

答案是肯定的。 TensorFlow的另一个概念是计算与图形分离,这意味着只要您的计算在同一session中运行,您对acurracy和{{1}的结果也会相同。 }。但当然我们总是喜欢1)。

关于你的最后一个问题,关于权重函数。在他的笔记本上你可以看到没有计算:

cost

他只是在绘制# Retrieve the values of the weight-variables from TensorFlow. # A feed-dict is not necessary because nothing is calculated. w = session.run(weights) 函数产生的权重输出。