Tensorflow:什么时候应该使用或不使用 `feed_dict` ?

标签 tensorflow

我有点困惑为什么我们要使用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/

相关文章:

machine-learning - 具有多 GPU 方法的 tensorflow 分布式训练混合

android - 保存/传输模型 - Android 上的 TensorFlow Lite 迁移学习

python - 通过哪种适应时间序列的技术可以替换 Python 中的 Keras MLP 回归模型中的交叉验证

tensorflow - TPU术语混淆

Tensorflow - tf.variable_scope,GAN 的重用参数

python - 如何在 tensorflow 中提取层或 ValueError : Shape (? , 4096) 必须具有排名 1

tensorflow - 神经网络超参数调整 - 设置随机种子是个好主意吗?

python - 如何将值注入(inject) TensorFlow 图的中间?

python-3.x - 从头开始实现 Faster Rcnn

python - keras 准确率提高不超过 59%