TensorFlow feed_dict 问题

Posted

技术标签:

【中文标题】TensorFlow feed_dict 问题【英文标题】:Tensorflow feed_dict issue 【发布时间】:2017-12-21 16:52:34 【问题描述】:

所以我是 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 并且在 tensorflow 图中计算精度已经计算成本,是否再次通过神经网络来评估值,或者它会返回计算的值而不经过又上网了?

另外,由于图中已经计算了成本,如果我想检索最新计算的成本,我可以按照 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 将返回 None。而 tf.Operation 是张量流图中的节点,对两个张量进行计算。

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

【问题讨论】:

【参考方案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 中运行,acurracycost 也将获得相同的结果。但我们当然更喜欢 1)。

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

# Retrieve the values of the weight-variables from TensorFlow.
# A feed-dict is not necessary because nothing is calculated.
w = session.run(weights)

他只是在绘制由optimize 函数引起的权重输出。

【讨论】:

谢谢,现在对我来说很有意义。所以关于我的第二个问题,我的理解是,由于图中的权重是一个张量变量。如果我错了,请纠正我。如果计算权重,例如 weights = tf.reshape(X, [-1,10]),我们需要 feed_dict 来找到权重?

以上是关于TensorFlow feed_dict 问题的主要内容,如果未能解决你的问题,请参考以下文章

解决Tensorflow源码安装的之后TensorBoard 无法使用的问题

如何使用 TensorFlow 连接两个具有不同形状的张量?

TensorFlow 读取带有标签的图像

windows Anaconda TensorFlow

tensorflow多GPU

IOError:[Errno 28] 安装 TensorFlow 时设备上没有剩余空间