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(损失函数)

可以通过手动的将Wb的值重新赋值为-11的方式来提高我们的算法的效果。变量可以初始化后将数据提供给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]}))

原文地址:https://www.cnblogs.com/ceceliahappycoding/p/8303996.html