tensorflow 学习笔记
computational graph(用于计算的图)是一系列排列在graph的节点上的TensorFlow操作单元。让我们来构建一个简单的computational graph。每个节点接受0个或多个tensor作为输入,并且产生一个tensor作为输出。session(会话) 封装了TensorFlow运行时的控件和状态。
import tensorflow as tf
node1=tf.constant(3.0,tf.float32)
node2=tf.constant(4.0) #also a float32
常量类型是节点的一种类型。正如所有的TensorFlow常量一样,它是不接收输入的,并且输出一个它内部存储的值。
sess=tf.Session()
print(sess.run(node1),sess.run(node2))
结果:3.0 4.0
#node3=tf.add(node1,node2)
node3=node1+node2
print(sess.run(node3))
结果;7.0
graph可以被参数化,并且通过placeholders(占位符)来接受外部的输入。
a=tf.placeholder(tf.float32)
b=tf.placeholder(tf.float32)
add_node=a+b
print(sess.run(add_node,{a:1,b:3}))
print(sess.run(add_node,{a:[1,2],b:[3,4]}))
结果:
4.0 [ 4. 6.]
计算(a+b)*3
add_and_triple=add_node*3
print(sess.run(add_and_triple,{a:1,b:3}))
结果:12.0
W=tf.Variable([.3],tf.float32)
b=tf.Variable([-.3],tf.float32)
x=tf.placeholder(tf.float32)
a=W*x+b
当调用tf.constant
时,常量被初始化,它们的值永远不会改变。相比之下,变量tf.Variable
在调用时不会被初始化。要初始化TensorFlow程序中的所有变量,必须显式调用特殊的初始化操作,如下所示:
init=tf.global_variables_initializer()
sess.run(init)
在这里,直到我们调用sess.run
之前,变量是未初始化的。(真正把0.3和-0.3赋给W和b)
损失函数
a - y
创建一个向量,其中每个元素是相应的样本的误差增量。我们称之为平方。然后,我们使用tf.reduce_sum
将所有平方误差求和,以创建一个单一的标量,用于提取出表示所有样本的总误差值:
y=tf.placeholder(tf.float32)
loss=tf.reduce_mean(tf.square(y-a))
print(sess.run(loss,{x:[1,2,3,4],y:[0.1,0.3,0.5,0.8]}))
优化器Optimizer
optimizer=tf.train.GradientDescentOptimizer(0.01) #使用梯度下降法进行优化,学习率为0.01
train=optimizer.minimize(loss) #优化目标;最小化loss(损失函数)
可以通过手动的将W
和b
的值重新赋值为-1
和1
的方式来提高我们的算法的效果。变量可以初始化后将数据提供给tf.Variable
对象,也可以使用像tf.assign
这样的操作来更改。
fixW=tf.assign(W,[-1.])
fixb=tf.assign(b,[1.])
sess.run([fixW,fixb])
print(sess.run(linear_sum,{x:[1,2,3,4],y:[.1,.3,.5,.8]}))