所以我是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图中的节点,它为两个张量进行计算。
但是,我不认为这份文件与我的问题有关......
答案 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()
从代码中可以看出,我们有两个未填充任何数字的占位符。我们的目标是计算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
和{{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)
函数产生的权重输出。