当我阅读 TensorFlow 代码时,我看到人们为函数的输入参数指定占位符,然后在 session.run 中提供输入数据。一个简单的例子可能是这样的:

def sigmoid(z):

    x = tf.placeholder(tf.float32, name='x')

    sigmoid = tf.sigmoid(x)

    with tf.Session() as session:
        result = session.run(sigmoid, feed_dict={x:z})

    return result

我想知道他们为什么不直接将 z 输入 tf.sigmoid(z) 并去掉占位符 x

如果这是最佳实践,其背后的原因是什么?

最佳答案

在您的示例方法 sigmoid 中,您基本上构建了一个小型计算图(见下文)并使用 session.run 运行它(以相同的方法)。是的,在您的情况下使用占位符不会增加任何好处。

python - 为什么对 TensorFlow 函数的输入数据使用占位符-LMLPHP

然而,通常人们只是构建了计算图(然后用数据执行图)。但是在构建图形时,不需要数据。这就是我们使用占位符来保存数据位置的原因。或者换句话说,它允许我们在不需要任何数据的情况下创建我们的计算操作。

另外 this 应该解释为什么我们要使用 tf.placehoder 而不是 tf.Variable 来保存训练数据。简而言之:

  • tf.Variable 用于模型的可训练参数。
  • tf.placeholder 用于训练数据,不会随着模型训练而改变。
  • 占位符不需要初始值。
  • 通过 feed 获取的数据的第一维可以是 None,因此支持任何 batch_size。
  • 关于python - 为什么对 TensorFlow 函数的输入数据使用占位符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46943173/

    10-12 22:11
    查看更多