一、计算图的构造流程
1、inference() -尽可能的构造图表,满足促使神经网络向前反馈并作出预测的要求。
2、loss() -往inference 图表中添加生成损失(loss)所需要的操作(ops)
3、training() -往损失图表中添加计算并应用梯度所需的操作。
二、计算操作的相关知识点
1、tensorflow 内建的运算操作
2、变量(Variable):
当训练模型时,用变量来存储和更新参数。变量包含张量(Tensor)存放于内存的缓冲区。
建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可以在之后模型训练和分析时被加载。
创建:使用构造函数Variable(),变量通常为常量或随机数
Weights = tf.Variable(tf.eandom_normal([784,200],stddev = 0.35),name = “weights”) biases = tf.Variable(tf.zeros([200]),name = “biases”) |
2.1、变量(Variable):初始化
a、一次性全部初始化:
变量的初始化必须在模型的其他操作运行之前先明确地完成。
#初始化变量(init 是一个节点) init = tf.initialize_all_variables() #启动图(graph) sess =tf.Session() sess.run(init) |
b、由另一个变量初始化
weights=tf.Variable(tf.random_normal([784,200],stddev = 0.35),name =”weights”) w2 = tf.Variable(weights.initialized_value(),name=”w2”) w_twice = tf.Variable(weights.initialized_value()*0.2,name = “w_twice”) |
2.2、变量(Variable):保存和恢复
a、保存变量
在图中对每个变量建一个saver节点
v1 = tf.Variable(…,name=”v1”) v2= tf.Variable(…,name=”v2”) #添加初始化操作初始前面所有变量 init_op =tf.initialize_all_variables() #添加Saver操作对变量进行保存和恢复 saver = tf.train.Saver() #启动会话 with tf.Session() as sess: #运行初始化节点 sess.run(init_op) #将变量的值保存到硬盘里 save_path=saver.save(sess,”/tmp/model.ckpt”) print “Model saved in file:”,save_path |
b、恢复变量
用同一个saver对象来恢复变量。注意,当你从文件中恢复变量时,不需要事先对他们做初始化
#创建变量 v1 = tf.Variable(…,name = “v1”) v2 = tf.Variable(…,name=”v2”) #添加Saver 操作对变量进行恢复 saver = tf.train.Saver() #启动会话 with tf.Session() as sess: #从硬盘中读取检查点文件并恢复到对应变量中 saver.restore(sess,”/tmp/model.ckpt”) print “Model restored” #在已经恢复的模型上继续工作 |
c、存储恢复哪些变量(python 字典)
通过tf.train.Saver()构造函数传入Python字典,很容易地定义需要保持的变量及对应名称:建对应使用德名称,值对应被管理的变量
#创建变量 v1 = tf.Variable(…,name = “v1”) v2 = tf.Variable(…,name=”v2”) #初始化 init_op =tf.initialize_all_variables() #只保存‘v2’,使用另外的名字“my_v2” saver = tf.train.Saver({“my_v2”:v2})
|
3、会话(Session):创建和运行
完成全部构建准备、生成全部所需的操作之后,可以构建一个tf.Session,用于运行图表。
Sess = tf.Session()
另外,也可以利用with 代码块生成Session,限制作用域:
with tf.Session() as sess:
生成会话之后,所有tf.Variable 实例都会立即通过调用各自初始化操作中的sess.run()函数进行运行
#初始化变量 init= tf.initialize_all_variables() #创建计算图(graph) sess= tf.Session() #执行初始化节点 sess.run(init) |
Sess.run()方法将会运行图表中与作为参数传入的操作相对应的完整子集train训练集。
在初次调用时,init 操作只包含了变量初始化程序tf.group.图表的其他部分不会在这里,而是在下面的训练循环运行。
完成会话中的变量初始化之后,开始训练。
训练德每一步都是通过用户代码控制,而能实现有效训练的最简单循环就是
For step in xrange(0,201); #循环201次 sess.run(train) #运行计算图 if step % 20 ==0: printf step, sess.run(w),sess.run(b) #输出权值,偏执 |