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中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
python操作ssh实现服务器日志下载的方法
Jun 03 Python
pandas string转dataframe的方法
Apr 11 Python
Flask框架配置与调试操作示例
Jul 23 Python
Python线程之定位与销毁的实现
Feb 17 Python
Python如何把十进制数转换成ip地址
May 25 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
Python生成随机验证码代码实例解析
Jun 09 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
基于 Python 实践感知器分类算法
Jan 07 Python
python实现马丁策略的实例详解
Jan 15 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
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
JS文本框不能输入空格验证方法
2013/03/19 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
2017/01/04 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
Python中int()函数的用法浅析
2017/10/17 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
Python如何执行系统命令
2020/09/23 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
影视艺术学院毕业生自荐信
2013/11/13 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
golang操作rocketmq的示例代码
2022/04/06 Golang