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()
从代码中您可以看到我们有两个未填充任何数字的占位符。我们的目标是计算a
和b
的总和。通过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
和cost
也将获得相同的结果。但我们当然更喜欢 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 问题的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中为 Tensorflow 模型定义 feed_dict
如何使用队列方法(没有 feed_dict)#tensorflow 在保存的模型上使用测试数据?