tensorflow程序分为两个阶段:
第一个阶段:定义计算图所有的计算
第二个阶段:执行计算
第一节:计算模型—–计算图
第二节:数据模型—–张量
第三节:运行模型—–会话
第一节:计算图
计算图中的每个节点都代表一个“运算”,边代表运算之间的“依赖关系”。
第二节:张量
张量可以理解为多维数组,n为张量就是n维数组。tensorflow中的张量不直接采用数组的形式,而是运算结果的“引用”。
import tensorflow as tf
#tf.constant是一个计算,这个计算的结果是一个张量,保存在变量a中。
a = tf.constant([1.0,2.0],name = "a")
a = tf.constant([2.0,3.0],name = "b")
result = tf.add(a,b,name = "add")
print result
输出
tensor("add:0",shape=(2,),dtye = float32)
可以用:
tf.Session().run(result)
来得到结果 。
第三节:会话
会话用来执行定义好的运算。会话管理tensorflow程序运行时所拥有的资源。
使用会话的两种模式:
第一种:明确调用会话生成函数和会话关闭函数。
sess = tf.Session()#创建一个会话
sess.run(...)#使用会话关心运行结果
sess.close()#关闭会话,释放资源
第二种:使用python的上下文管理器
with tf.Session as sess:
#使用这个session关系运行结果
run.sess(...)
#不用明确调用关闭会话函数,执行完后会自动回收资源
第四节:tensorflow实现神经网络
tensorflow实现前向传播网络:
a = tf.matmul(x,w1)#a代表中间的隐藏层
y = tf.matmul(a,w2)#y代表输出层
神经网络参数与tensorflow变量(tf.Variable):tensorflow中的变量需要指定初始值,一般使用随机数给变量初始化,例如下面初始化权重。
weights = tf.Variable(random_normal([2,3],stddev = 2))#产生一个2*3的随机矩阵,均值为0,标准差为2。
神经网络中,偏置项bias通常用常数设置初始值。
biases = tf.Variable(tf.zeros([3]))
通过tensorflow训练神经网络模型:
第一步:通过tensorflow表达一个batch的数据
tensorflow通过placeholder传入大量的数据
第一阶段
1.导入tensorflow
2.定义权重变量
3.输入数据x由placeholder输入
4.前向传播第二阶段
1.启动会话
2.初始化所有变量
3.feed_dict给x喂数据
4.运行会话
tensorflow中的反向传播算法
#预测值与真实值之间的差距
cross_entropy = -tf.reduce_mean(
y_*tf.log(tf.clip_by_value(y,1e-10,1.0))
)
#定义学习率
learning_rate = 0.001
#反向传播优化参数
train_step =\ tf.train.AdamOptimier(learning_rate).minimize(cross_entropy)#tf.train.AdamOptimier是三种常用优化方法中的一种。
#运行
sess.run(train_step)