最全Tensorflow模型保存和提取的方法——附实例

一、Tensorflow模型的保存和提取方法

1、Tensorflow通过tf.train.Saver类实现神经网络模型的保存和提取。tf.train.Saver对象saver的save方法将Tensoreflow模型保存到指定的路径中,saver.save(sess,'model/model.ckpt).实际在这个文件目录下有4个文件:


checkpoint 文件保存了一个录下多有的模型文件列表,model.ckpt.meta保存了tensorflow计算图的结构信息,model.ckpt保存每个变量的取值,此处文件名的写入方式会因不同参数的设置不同,但加载restore时的文件路径名是以checkpoint文件的‘model_checkpoint_path’值决定的。

2.加载这个已保存的tensorflow模型的方法是saver.restore(sess,'./model/model.ckpt'),加载模型的代码中也要定义tensorflow计算图上的所有运算并声明一个tf.train.Saver类,不同的是加载模型时不需要进行变量的初始化,而是将变量的取值通过保存的模型加载进来,如果不希望重复定义计算图上的运算,可直接加载已经持久化的图,saver = tf.train.import_meta_graph('model/model.ckpt.meta')

3.tf.train.Saver类也支持在保存和加载时给变量重命名,声明Saver类对象的时候使用一个字典dict重命名变量即可,{已知保存的变量名:重命名变量名},saver.tf.train.Saver({v1:u1,v2:u2})即原来名称name为v1的变量现在加载到变量u1中。

4.第三条做的目的之一就是方便使用变量的滑动平均值。如果在加载模型时直接将影子变量映射到变量自身,则在使用训练好的模型时就不需要再调用函数来获取变量的滑动平均值了。载入时,声明Saver类对象时通过一个字典将滑动平均值直接加载到新的变量中,saver = tf.train.Saver({v/ExponentialMovingAverage:v}) 另通过tf.train.ExponentialMovingAverage的variables_to_restore()函数获取变量重命名字典。通过convert_variables_to_constants函数将计算图中的变量以及其取值痛殴常量的方式保存于一个文件中

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:  
    sess.run(tf.global_variables_initializer())  
    saver.save(sess, "Model/model.ckpt")  
  
  
# Part2: 加载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, "./Model/model.ckpt") # 注意此处路径前添加"./"  
    print(sess.run(result)) # [ 3.]  
  
  
# Part3: 若不希望重复定义计算图上的运算,可直接加载已经持久化的图  
  
import tensorflow as tf  
  
saver = tf.train.import_meta_graph("Model/model.ckpt.meta")  
  
with tf.Session() as sess:  
    saver.restore(sess, "./Model/model.ckpt") # 注意路径写法  
    print(sess.run(tf.get_default_graph().get_tensor_by_name("add:0"))) # [ 3.]  
  
  
# Part4: tf.train.Saver类也支持在保存和加载时给变量重命名  
  
import tensorflow as tf  
  
# 声明的变量名称name与已保存的模型中的变量名称name不一致  
u1 = tf.Variable(tf.constant(1.0, shape=[1]), name="other-v1")  
u2 = tf.Variable(tf.constant(2.0, shape=[1]), name="other-v2")  
result = u1 + u2  
  
# 若直接生命Saver类对象,会报错变量找不到  
# 使用一个字典dict重命名变量即可,{"已保存的变量的名称name": 重命名变量名}  
# 原来名称name为v1的变量现在加载到变量u1(名称name为other-v1)中  
saver = tf.train.Saver({"v1": u1, "v2": u2})  
  
with tf.Session() as sess:  
    saver.restore(sess, "./Model/model.ckpt")  
    print(sess.run(result)) # [ 3.]  
  
  
# Part5: 保存滑动平均模型  
  
import tensorflow as tf  
  
v = tf.Variable(0, dtype=tf.float32, name="v")  
for variables in tf.global_
  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

92年的研究员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值