当我阅读 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
运行它(以相同的方法)。是的,在您的情况下使用占位符不会增加任何好处。
然而,通常人们只是构建了计算图(然后用数据执行图)。但是在构建图形时,不需要数据。这就是我们使用占位符来保存数据位置的原因。或者换句话说,它允许我们在不需要任何数据的情况下创建我们的计算操作。
另外 this 应该解释为什么我们要使用 tf.placehoder
而不是 tf.Variable
来保存训练数据。简而言之:
tf.Variable
用于模型的可训练参数。 tf.placeholder
用于训练数据,不会随着模型训练而改变。 None
,因此支持任何 batch_size。 关于python - 为什么对 TensorFlow 函数的输入数据使用占位符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46943173/