【问题标题】:Tensorflow: When should I use or not use `feed_dict`?Tensorflow:我什么时候应该使用或不使用`feed_dict`?
【发布时间】:2019-04-02 18:17:40
【问题描述】:

我有点困惑为什么我们使用feed_dict?根据我的朋友的说法,您在使用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


    【解决方案1】:

    在 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)
    

    【讨论】:

    • (首先,我是新手)。在您的最后一个示例中,使用常量,如果您改用变量,变量和占位符之间有什么区别,因为我也可以更改变量值?谢谢
    • 这更适合 TF 1.x。如果您是新手,您将使用 2.x,并且应该遵循 TF 2.x 的指南,这会极大地改变事物的计算方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2016-11-01
    • 2021-06-13
    相关资源
    最近更新 更多