通过TensorFlow程序持久化一个训练好的模型,并从持久化的模型文件中还原被保存的模型。
保存TensorFlow计算图:
import tensorflow as tf
#声明两个变量并计算它们的和
v1=tf.Variable(tf.constant(1.0,shape=[1]),name="v1")
v2=tf.Variable(tf.constant(2.0,shape=[1]),name="v2")
result=v1 + v2
init_op=tf.global_variables_initializer()
#声明tf.train.Saver类用于保存模型
saver=tf.train.Saver()
with tf.Session() as sess:
sess.run(init_op)
#将模型保存到model.ckpt文件
saver.save(sess,"test/model.ckpt")
saver.save函数将TensorFlow模型保存到了test/model.ckpt文件中。TensorFlow模型一般会存在后缀为.ckpt的文件中。
这是test文件夹中的文件:
model.ckpt.meta,它保存了TensorFlow计算图的结构
model.ckpt,保存了TensorFlow程序中每一个变量的取值
checkpoint保存了一个目录下所有模型的列表。
加载已经保存的TensorFlow模型的方法:
import tensorflow as tf
#使用和保存模型代码中一样的方式来声明变量
v1=tf.Variable(tf.constant(1.0,shape=[1]),name="v1")
v2=tf.Variable(tf.constant(2.0,shape=[1]),name="v2")
result=v1+v2
saver=tf.train.Saver()
with tf.Session() as sess:
#加载已经保存的模型,并通过已经保存的模型中变量的值来计算加法
saver.restore(sess,"test/model.ckpt")
print(sess.run(result))
运行结果:[3.]
上面两段代码唯一不同的是,在加载模型的代码中没有运行变量的初始化过程,而是通过变量的值通过已经保存的模型加载进来。
如果不希望定义图上的运算,可以直接加载已经持久化的图:
import tensorflow as tf
#z直接加载持久化的图
saver=tf.train.import_meta_graph("test/model.ckpt.meta")
with tf.Session() as sess:
saver.restore(sess,"test/model.ckpt")
#通过张量的名称来获取张量
print(sess.run(tf.get_default_graph().get_tensor_by_name("add:0")))
运行结果:[3.]
这个程序默认保存和加载了TensorFlow计算图上定义的全部变量。