tf.constant Vs tf.placeholder

时间:2017-10-22 19:31:53

标签: python machine-learning tensorflow

我正在阅读Andrew Ng的深度学习课程,我不理解使用常量的基本目的。占位符可以做到这一点,为什么我们需要常量?假设我需要计算一个函数......同样可以通过取常量和占位符来执行。我很迷茫。如果有人能说清楚,那将非常感激。

2 个答案:

答案 0 :(得分:2)

常量和占位符都是计算图中的节点,零输入和一个输出 - 也就是说,它们代表常量值。

不同之处在于您作为程序员指定这些值。使用常量时,值是计算图本身的一部分,在创建常量时指定:例如tf.constant(4)。使用占位符,每次运行计算图时,您都可以在feed_dict中输入不同的值。

在机器学习中,占位符通常用于保存数据的节点,因为我们可能希望在循环中一次又一次地使用数据集的不同部分运行相同的图形。 (使用常量这是不可能的。)人们还使用占位符来获取在训练期间发生变化的参数,例如学习率。 (训练通常涉及使用不同的占位符值一遍又一遍地运行计算图。)常量仅用于实际上不变的事物。对于这些事情,我们不想使用占位符,因为我们不希望每次运行图形时都要反复指定它们。

如果你很好奇,这个Jupyter笔记本对计算图和占位符,常量和变量所起的作用有深入的解释:https://github.com/kevinjliang/Duke-Tsinghua-MLSS-2017/blob/master/01B_TensorFlow_Fundamentals.ipynb

答案 1 :(得分:1)

顾名思义,placeholder没有任何固定值,而只是计算图中所需的“张量的保留位置”; constant是具有固定值的东西(也具有张量)。 constant不会在其生存期内更改其值(不仅仅是session)。一旦定义(在编程过程中),它就固定下来。另一方面,placeholder在图形定义(编程)时不会指示任何值,而是在fed运行开始时获取其值session。实际上,所有占位符都应该以这种方式获得其价值。

session.run(a_variable, feed_dict={a_placeholder: [1.0, 2.1]})

现在您可能会想到placeholdertf.variable有什么不同,因此就不需要像会话变量那样要求占位符进行会话评估了,< / p>

session.run(a_tf_variable)

占位符通常用于输入节点,我们在其中输入不同输入的值(并且我们不希望对它们进行求值)。常数的典型用法是说拥有值,例如PI或人口研究中地理区域/区域的面积。