tensorflow中允许将训练的variable存储起来,下次读取并接着训练。
存储saver:
import tensorflow as tf
import numpy as np #使用numpy代码会省事些
#Save to file
#remember to define the same dtype and shape when restore
W = tf.Variable([[1,2,3],[3,4,5]],dtype=tf.float32,name='weights') #最好定义下dtype
b = tf.Variable([[1,2,3]],dtype=tf.float32,name='biases')
init = tf.global_variables_initializer()
#定义tensorflow的saver,用它来存储各种变量
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(init)
#开始保存的这一步了 这里保存后会返回一个值,保存在save_path中 保存为ckpt后缀
save_path = saver.save(sess,"my_net/save_net.ckpt") #restore的时候会把saver换为restore
print("Save to path:",save_path)
读取restore:
import tensorflow as tf
import numpy as np #使用numpy代码会省事些
#restore variables
#redefine the same shape and same type for your variables 读取时的形状和数据类型必须和当初一样才能正确的导入
W = tf.Variable(np.arange(6).reshape((2,3)),dtype=tf.float32,name="weights") #先定义一个空的、没有意义的框架,可以随便取值
#not need init step #restore的时候不用定义initial
saver = tf.train.Saver() #用saver来提取到文件
with tf.Session() as sess:
saver.restore(sess,"my_net/save_net.ckpt") #因为不用运行initial,所以可以直接提取它
print("weights:",sess.run(W)) #看一下这两个参数
print("biases:",sess.run(b))
#目前tensorflow只能保存variable,还不能保存整个神经网络框架 。因此可以重新定义一下框架,
#再把 variable重新放进来继续学习
注意:
saver之后最好重启软件再运行restore,不然容易报很长的错