字典问题

所以我对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在成本和tensorflow中接收到相同的feed_dict,图计算的准确性已经计算了成本,再次通过神经网络评估该值,或者它将返回没有经过网络再次计算的值?

此外,由于成本已经在图中计算,如果我想检索计算出的最新成本,我可以按照3的方式进行计算吗?

另外,从Hvass-Labs / TensorFlow-Tutorials / TensorFlow Tutorial#02卷积神经网络,

在函数plot_conv_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是张量流图中的节点,用于计算二维张量。

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


要了解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函数引起的权重输出。

链接地址: http://www.djcxy.com/p/5509.html

上一篇: dict issue

下一篇: Can't run prediciton because of troubles with tf.placeholder