为什么使用占位符作为TensorFlow函数的输入数据

时间:2017-10-25 22:46:53

标签: python tensorflow

当我阅读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

如果这是最佳做法,背后的原因是什么?

1 个答案:

答案 0 :(得分:2)

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

enter image description here

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

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

  • tf.Variable适用于模型的可训练参数。
  • tf.placeholder用于训练数据,这些数据不会作为模型训练而改变。
  • 占位符不需要初始值。
  • 通过馈送的第一维数据可以是None,从而支持任何batch_size。