我有点困惑为什么我们要使用feed_dict
?据我的 friend 说,当您使用 placeholder
时,通常会使用 feed_dict
,这可能对生产不利。
我见过这样的代码,其中不涉及 feed_dict
:
for j in range(n_batches):
X_batch, Y_batch = mnist.train.next_batch(batch_size)
_, loss_batch = sess.run([optimizer, loss], {X: X_batch, Y:Y_batch})
我也见过这样的代码,其中涉及到feed_dict
:
for i in range(100):
for x, y in data:
# Session execute optimizer and fetch values of loss
_, l = sess.run([optimizer, loss], feed_dict={X: x, Y:y})
total_loss += l
我理解 feed_dict
是您正在输入数据并尝试 X
作为键,就像在字典中一样。但在这里我看不出有什么区别。那么,到底有什么区别以及为什么我们需要 feed_dict
?
最佳答案
在 tensorflow 模型中,您可以定义一个占位符,例如 x = tf.placeholder(tf.float32)
,然后您将在模型中使用 x
。
例如,我定义了一组简单的操作:
x = tf.placeholder(tf.float32)
y = x * 42
现在,当我要求 Tensorflow 计算 y
时,很明显 y
取决于 x
。
with tf.Session() as sess:
sess.run(y)
这会产生错误,因为我没有给它指定 x
的值。在本例中,由于 x
是占位符,因此如果在计算中使用它,则必须通过 feed_dict
传入它。如果不这样做,那就是一个错误。
让我们解决这个问题:
with tf.Session() as sess:
sess.run(y, feed_dict={x: 2})
这次的结果将是84
。伟大的。现在让我们看一个不需要 feed_dict
的简单情况:
x = tf.constant(2)
y = x * 42
现在没有占位符(x
是一个常量),因此不需要向模型提供任何内容。现在可以了:
with tf.Session() as sess:
sess.run(y)
关于Tensorflow:什么时候应该使用或不使用 `feed_dict` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50497724/