Machine learning 什么时候需要占位符?
我看到的每个TensorFlow示例都使用占位符将数据输入到图形中。但我的应用程序在没有占位符的情况下运行良好。根据,使用占位符是“最佳实践”,但它们似乎使代码变得不必要的复杂Machine learning 什么时候需要占位符?,machine-learning,tensorflow,Machine Learning,Tensorflow,我看到的每个TensorFlow示例都使用占位符将数据输入到图形中。但我的应用程序在没有占位符的情况下运行良好。根据,使用占位符是“最佳实践”,但它们似乎使代码变得不必要的复杂 是否存在绝对需要占位符的情况?A占位符承诺以后提供值。 简单的例子是定义两个占位符a、b,然后对它们执行如下操作 a = tf.placeholder(tf.float32) b = tf.placeholder(tf.float32) adder_node = a + b # + provides a shortcu
是否存在绝对需要占位符的情况?A占位符承诺以后提供值。 简单的例子是定义两个占位符a、b,然后对它们执行如下操作
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b # + provides a shortcut for tf.add(a, b)
a、b
未初始化且不包含任何数据,因为它们被定义为占位符
另一种方法是定义变量tf.Variable
,在这种情况下,在声明时必须提供初始值。
比如:
或
这种解决方案有两个缺点
- 性能方面,您需要在调用时多做一步 但是,这些变量是可更新的
- 在某些情况下,您不知道这些变量的初始值 因此,您必须将其定义为占位符
- 使用
作为可训练变量,例如模型的权重(W)和偏差(B),或者当需要初始值时 将军tf.Variable
允许您创建操作和构建计算图,而无需数据。在张量流中 术语,然后通过这些 占位符tf.placeholder
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b # + provides a shortcut for tf.add(a, b)
a、b
未初始化且不包含任何数据,因为它们被定义为占位符
另一种方法是定义变量tf.Variable
,在这种情况下,在声明时必须提供初始值。
比如:
或
这种解决方案有两个缺点
- 性能方面,您需要在调用时多做一步 但是,这些变量是可更新的
- 在某些情况下,您不知道这些变量的初始值 因此,您必须将其定义为占位符
- 使用
作为可训练变量,例如模型的权重(W)和偏差(B),或者当需要初始值时 将军tf.Variable
允许您创建操作和构建计算图,而无需数据。在张量流中 术语,然后通过这些 占位符tf.placeholder
我非常喜欢艾哈迈德的答案,我投了更高的票,但我想提供另一种解释,可能会,也可能不会让事情变得更清楚 Tensorflow的一个重要特性是,它的操作图是在构建它们的原始环境之外编译和执行的。这使得Tensorflow可以进行各种技巧和优化,如分布式、平台无关计算、图形互操作性、GPU计算等。但所有这些都是在因为你的图形是在它自己的虚拟机中执行的,所以你必须有一种特殊的方式从外部向它输入数据,例如从你的python程序 这就是占位符的作用。将数据馈送到模型中的一种方法是在执行图形操作时通过馈送字典提供数据。为了指示这些数据应该在图形中的哪个位置,您可以使用占位符。正如艾哈迈德所说,这种方法是placeh # define graph to do matrix muliplication x = tf.placeholder(tf.float32) y = tf.placeholder(tf.float32) # this is the actual operation we want to do, # but since we want to supply x and y at runtime # we will use placeholders model = tf.matmul(x, y) # now lets supply the data and run the graph init = tf.global_variables_initializer() with tf.Session() as session: session.run(init) # generate some data for our graph data_x = np.random.randint(0, 10, size=[5, 5]) data_y = np.random.randint(0, 10, size=[5, 5]) # do the work result = session.run(model, feed_dict={x: data_x, y: data_y}