示例 sn-p:
import numpy as np
import tensorflow as tf
### Model parameters ###
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
### Model input and output ###
x = tf.placeholder(tf.float32)
linear_model = W * x + b
y = tf.placeholder(tf.float32)
### loss ###
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
### optimizer ###
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
### training data ###
x_train = [1,2,3,4]
y_train = [0,-1,-2,-3]
### training loop ###
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
sess.run(train, {x:x_train, y:y_train})
顾名思义,占位符是承诺稍后提供值,即
变量只是训练参数 (W(matrix), b(bias) 与您在日常编程中使用的正常变量相同,培训师会更新/修改这些变量每次运行/步骤。
虽然 placeholder 不需要任何初始值,但当您创建 x 和 y 时,TF 不会分配任何内存,而是稍后当您在 @987654329 中提供占位符时@ 使用 feed_dict,TensorFlow 将为它们分配适当大小的内存(x 和 y)——这种不受约束的特性允许我们提供任何大小和形状的数据。
简而言之:
变量 - 是您希望训练器(即 GradientDescentOptimizer)在每一步之后更新的参数。
占位符演示 -
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b # + provides a shortcut for tf.add(a, b)
执行:
print(sess.run(adder_node, {a: 3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))
导致输出
7.5
[ 3. 7.]
在第一种情况下,3 和 4.5 将分别传递给 a 和 b,然后到 adder_node 输出 7。在第二种情况下,有一个提要列表,第一步和 2 将被添加,接下来的 3 和4(a 和 b)。
相关阅读: