Computational Graph
TF的编程由两个离散的步骤组成
- 搭建computational graph
- 运行computational graph
这 computational graph 由多个nodes组成,node可能是某个数据、或者中间的计算值、或者是某项操作。
constant
placeholder
placeholder 是个保证以后会赋予某个值的量,通过对一些placeholder定义好某项操作后可以在session.run()的时候为这些placeholder赋予某个值,并得出运算结果。
variable
因为机器学习里对参数的优化很重要,需要变量类型来存储参数并不时改变它的值。Variable让我们可以在graph里添加可训练的参数。
placeholder 和 variable 的区别在哪儿?placeholder并不能改变,它只是个将来会有某个值的容器一样的东西。
variable需要我们手动初始化:
init = tf.global_variables_initializer()
sess.run(init)
其中init只是一个可以用来初始化的handle(句柄?),需要通过session.run才可以对variable进行初始化。
这里贴上教程里的代码
import tensorflow as tf
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b # + provides a shortcut for tf.add(a,b)
sess = tf.Session()
print(sess.run(adder_node, {a:3, b: 4.5}))
print(sess.run(adder_node, {a: [1, 3], b: [2, 4]}))
# linear model
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W*x + b
init = tf.global_variables_initializer()
sess.run(init)
print(sess.run(linear_model, {x: [1,2,3,4]}))
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
sess.run(init) # reset values to incorrect defaults.
for i in range(1000):
sess.run(train, {x: [1, 2, 3, 4], y: [0, -1, -2, -3]})
print(sess.run([W, b]))
网友评论