[Tensorflow] Session.run、model保存和optimizer优化器

来源:互联网 发布:flash cs6 mac版 编辑:程序博客网 时间:2024/04/28 14:21

一、Session.run()

tf.Session.run(fetches,  #一个tensor或tensor list  feed_dict=None,   options=None,   run_metadata=None)#Runs operations and evaluates tensors in fetches.

二、VARIABLES save and restore  

Variables are saved in binary files that, roughly, contain a map from variable names to tensor values。

每一个variable的name属性 对应 其tensor的值。

(1)tf.train.saver()  对象(tensor的name亦在此发挥作用)tf.train.saver只会保存variable类型的tensor

saver=tf.train.Saver(   var_list=None,      #要保存的vairables,默认为None,即保存所有的variables   max_to_keep=5       #最多保留5个模型(默认为5)   #等等一些参数   )#var_list会在variable name与其tensor value建立映射#var_list参数取值(1):dict#*********A dict of names to variables: #The keys are the names that will be used to save or restore the variables in the checkpoint files.***#var_list参数取值(2):list#****************A list of variables: #The variables will be keyed with their op name in the checkpoint files.*****************************#保存xxx,yyy两个variable,restore时,交换二者的值(通过交换二者的name)#文件一:mysave.py ====================保存======================import tensorflow as tfxxx=tf.Variable(tf.constant([1,1,1]),name="xxx") yyy=tf.Variable(tf.constant([2,2,2]),name="yyy") sess=tf.Session()saver=tf.train.Saver(   var_list=[xxx,yyy]   )sess.run(tf.global_variables_initializer()) saver.save(sess,"./model")  #Tips:var_list在为None(默认)时,会以name->tensor value的形式保存所有的Vairable。所以一般不设置var_list#文件二:myrestore.pyimport tensorflow as tfxxx=tf.Variable(tf.constant([1,1,1]),name="yyy") yyy=tf.Variable(tf.constant([2,2,2]),name="xxx") sess=tf.Session()saver=tf.train.Saver(   var_list=[xxx,yyy]   )sess.run(tf.global_variables_initializer()) saver.restore(sess,"./model")  print(sess.run(xxx))print(sess.run(yyy))#可以看到,xxx,yyy的值改变了。#Tips: 如果模型发生了修改(即使只修改了optimizer)那么都要定义var_list才能实现restore.

(2)模型保存:tr.train.saver().save()

save/restore 
saver.save(sess,    "./model.cjf",    #模型前缀(如果使用相对路径,需要加上./)    global_step=step  #globa_step会加在文件名后    )#返回值:正确返回保存的路径(模型分块则添加分块信息),错误返回Nonesaver.restore(sess.save_path)

三、optimizer



(1)三种比较优化器


tf.train.MomentumOptimizer(learning_rate, #学习率  momentum,                                #动量  use_locking=False,  name='Momentum',  use_nesterov=False)



(2)例子【这三种优化器比较】

import tensorflow as tf import numpy as npimport sys import mathx_data=np.random.rand(100).astype(np.float32)#print(x_data)#sys.exit(0)y_data=x_data*0.1+0.3W=tf.Variable(tf.constant([100],dtype=tf.float32))b=tf.Variable(tf.constant([100],dtype=tf.float32))x=tf.placeholder(tf.float32,[1])y=x*W+b _y=tf.placeholder(tf.float32,[1])loss=tf.square(y-_y)#四种梯度下降法#train=tf.train.GradientDescentOptimizer(1e-1).minimize(loss) #1300 steps后达到误差范围。#train=tf.train.AdamOptimizer(1e-1).minimize(loss)            #9000 steps后达到误差范围。train=tf.train.MomentumOptimizer(1e-1,0.9).minimize(loss)     #500  steps后达到误差范围。sess=tf.Session()sess.run(tf.global_variables_initializer())idx=0while True:  xx=[x_data[idx%100]]  yy=[y_data[idx%100]]  idx+=1  ww,bb,tt=sess.run([W,b,train],feed_dict={x:xx,_y:yy})  if math.fabs(ww-0.1)<1e-6 and math.fabs(bb-0.3)<1e-6:    print(ww,bb)    print("train_step:%d" %(idx))       break;   #说明:使用0.1的学习率,训练一维线性方程 y=0.1*x+0.3,初始时,W和b设为100。运行到W,b误差小于1e-6为止。