TensorFlow入门使用 tf.train.Saver()保存模型


Posted in Python onApril 24, 2018

关于模型保存的一点心得

saver = tf.train.Saver(max_to_keep=3)

在定义 saver 的时候一般会定义最多保存模型的数量,一般来说,如果模型本身很大,我们需要考虑到硬盘大小。如果你需要在当前训练好的模型的基础上进行 fine-tune,那么尽可能多的保存模型,后继 fine-tune 不一定从最好的 ckpt 进行,因为有可能一下子就过拟合了。但是如果保存太多,硬盘也有压力呀。如果只想保留最好的模型,方法就是每次迭代到一定步数就在验证集上计算一次 accuracy 或者 f1 值,如果本次结果比上次好才保存新的模型,否则没必要保存。

如果你想用不同 epoch 保存下来的模型进行融合的话,3到5 个模型已经足够了,假设这各融合的模型成为 M,而最好的一个单模型称为 m_best, 这样融合的话对于M 确实可以比 m_best 更好。但是如果拿这个模型和其他结构的模型再做融合的话,M 的效果并没有 m_best 好,因为M 相当于做了平均操作,减少了该模型的“特性”。

但是又有一种新的融合方式,就是利用调整学习率来获取多个局部最优点,就是当 loss 降不下了,保存一个 ckpt, 然后开大学习率继续寻找下一个局部最优点,然后用这些 ckpt 来做融合,还没试过,单模型肯定是有提高的,就是不知道还会不会出现上面再与其他模型融合就没提高的情况。

如何使用 tf.train.Saver() 来保存模型

之前一直出错,主要是因为坑爹的编码问题。所以要注意文件的路径绝对不不要出现什么中文呀。

import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)

# Create some variables.
v1 = tf.Variable([1.0, 2.3], name="v1")
v2 = tf.Variable(55.5, name="v2")

# Add an op to initialize the variables.
init_op = tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

ckpt_path = './ckpt/test-model.ckpt'
# Later, launch the model, initialize the variables, do some work, save the
# variables to disk.
sess.run(init_op)
save_path = saver.save(sess, ckpt_path, global_step=1)
print("Model saved in file: %s" % save_path)

Model saved in file: ./ckpt/test-model.ckpt-1

注意,在上面保存完了模型之后。应该把 kernel restart 之后才能使用下面的模型导入。否则会因为两次命名 “v1” 而导致名字错误。

import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)

# Create some variables.
v1 = tf.Variable([11.0, 16.3], name="v1")
v2 = tf.Variable(33.5, name="v2")

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

# Later, launch the model, use the saver to restore variables from disk, and
# do some work with the model.
# Restore variables from disk.
ckpt_path = './ckpt/test-model.ckpt'
saver.restore(sess, ckpt_path + '-'+ str(1))
print("Model restored.")

print sess.run(v1)
print sess.run(v2)

INFO:tensorflow:Restoring parameters from ./ckpt/test-model.ckpt-1
Model restored.
[ 1.          2.29999995]
55.5

导入模型之前,必须重新再定义一遍变量。

但是并不需要全部变量都重新进行定义,只定义我们需要的变量就行了。

也就是说,你所定义的变量一定要在 checkpoint 中存在;但不是所有在checkpoint中的变量,你都要重新定义。

import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)

# Create some variables.
v1 = tf.Variable([11.0, 16.3], name="v1")

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

# Later, launch the model, use the saver to restore variables from disk, and
# do some work with the model.
# Restore variables from disk.
ckpt_path = './ckpt/test-model.ckpt'
saver.restore(sess, ckpt_path + '-'+ str(1))
print("Model restored.")

print sess.run(v1)

INFO:tensorflow:Restoring parameters from ./ckpt/test-model.ckpt-1
Model restored.
[ 1.          2.29999995]

tf.Saver([tensors_to_be_saved]) 中可以传入一个 list,把要保存的 tensors 传入,如果没有给定这个list的话,他会默认保存当前所有的 tensors。一般来说,tf.Saver 可以和 tf.variable_scope() 巧妙搭配,可以参考: 【迁移学习】往一个已经保存好的模型添加新的变量并进行微调

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现冒泡,插入,选择排序简单实例
Aug 18 Python
Python模拟百度登录实例详解
Jan 20 Python
详解python之配置日志的几种方式
May 22 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
Python编程实现蚁群算法详解
Nov 13 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
opencv python 图像去噪的实现方法
Aug 31 Python
python科学计算之scipy——optimize用法
Nov 25 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
python如何支持并发方法详解
Jul 25 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 #Python
Windows上使用Python增加或删除权限的方法
Apr 24 #Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 #Python
解决python删除文件的权限错误问题
Apr 24 #Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 #Python
python3+PyQt5实现拖放功能
Apr 24 #Python
python3+PyQt5使用数据库表视图
Apr 24 #Python
You might like
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
python创建和删除目录的方法
2015/04/29 Python
python根据京东商品url获取产品价格
2015/08/09 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
Python Django搭建网站流程图解
2020/06/13 Python
详解如何修改python中字典的键和值
2020/09/29 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
实习护士自我鉴定
2013/10/13 职场文书
自我评价怎么写好呢?
2013/12/05 职场文书
中学实习教师自我鉴定
2013/12/12 职场文书
教师个人的自我评价分享
2014/01/02 职场文书
学术诚信承诺书
2014/05/26 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
详解CSS3浏览器兼容
2022/12/24 HTML / CSS