对TensorFlow中的variables_to_restore函数详解


Posted in Python onJuly 30, 2018

variables_to_restore函数,是TensorFlow为滑动平均值提供。之前,也介绍过通过使用滑动平均值可以让神经网络模型更加的健壮。我们也知道,其实在TensorFlow中,变量的滑动平均值都是由影子变量所维护的,如果你想要获取变量的滑动平均值需要获取的是影子变量而不是变量本身。

1、滑动平均值模型文件的保存

import tensorflow as tf
 
if __name__ == "__main__":
 v = tf.Variable(0.,name="v")
 #设置滑动平均模型的系数
 ema = tf.train.ExponentialMovingAverage(0.99)
 #设置变量v使用滑动平均模型,tf.all_variables()设置所有变量
 op = ema.apply([v])
 #获取变量v的名字
 print(v.name)
 #v:0
 #创建一个保存模型的对象
 save = tf.train.Saver()
 sess = tf.Session()
 #初始化所有变量
 init = tf.initialize_all_variables()
 sess.run(init)
 #给变量v重新赋值
 sess.run(tf.assign(v,10))
 #应用平均滑动设置
 sess.run(op)
 #保存模型文件
 save.save(sess,"./model.ckpt")
 #输出变量v之前的值和使用滑动平均模型之后的值
 print(sess.run([v,ema.average(v)]))
 #[10.0, 0.099999905]

上面的代码,是如何来保存一个滑动平均值的模型文件,之前有介绍过滑动平均值和模型文件的保存,所以这里就不再重复了。

2、滑动平均值模型文件的读取

v = tf.Variable(1.,name="v")
 #定义模型对象
 saver = tf.train.Saver({"v/ExponentialMovingAverage":v})
 sess = tf.Session()
 saver.restore(sess,"./model.ckpt")
 print(sess.run(v))
 #0.0999999

对于模型文件的读取,在上一篇博客中有介绍过,这里特别需要注意的一个地方就是,在使用tf.train.Saver函数中,所传递的模型参数是{"v/ExponentialMovingAverage":v}而不是{"v":v},如果你使用的是后面的参数,那么你得到的结果将是10而不是0.09,那是因为后者获取的是变量本身而不是影子变量。是不是感觉使用这种方式来读取模型文件的时候,还需要输入一大串的变量名称。

3、variables_to_restore函数的使用

v = tf.Variable(1.,name="v")
 #滑动模型的参数的大小并不会影响v的值
 ema = tf.train.ExponentialMovingAverage(0.99)
 print(ema.variables_to_restore())
 #{'v/ExponentialMovingAverage': <tf.Variable 'v:0' shape=() dtype=float32_ref>}
 sess = tf.Session()
 saver = tf.train.Saver(ema.variables_to_restore())
 saver.restore(sess,"./model.ckpt")
 print(sess.run(v))
 #0.0999999

通过使用variables_to_restore函数,可以使在加载模型的时候将影子变量直接映射到变量的本身,所以我们在获取变量的滑动平均值的时候只需要获取到变量的本身值而不需要去获取影子变量。

以上这篇对TensorFlow中的variables_to_restore函数详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python递归遍历列表及输出的实现方法
May 19 Python
python一键升级所有pip package的方法
Jan 16 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
python cs架构实现简单文件传输
Mar 20 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
tensorflow tf.train.batch之数据批量读取方式
Jan 20 Python
打包PyQt5应用时的注意事项
Feb 14 Python
tensorflow 实现数据类型转换
Feb 17 Python
python和js交互调用的方法
Jun 23 Python
Python常用数据分析模块原理解析
Jul 20 Python
python如何将图片转换素描画
Sep 08 Python
python实现简单区块链结构
Apr 25 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 #Python
tensorflow 打印内存中的变量方法
Jul 30 #Python
Python实现的多叉树寻找最短路径算法示例
Jul 30 #Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 #Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 #Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 #Python
对TensorFlow的assign赋值用法详解
Jul 30 #Python
You might like
PHP中函数内引用全局变量的方法
2008/10/20 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
JavaScript基本对象
2007/01/11 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
HTML5实现留言和回复页面样式
2015/07/22 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
详解Vue之计算属性
2020/06/20 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Python ATM功能实现代码实例
2020/03/19 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
高校学生干部的自我评价分享
2013/11/04 职场文书
股权投资意向书
2014/04/01 职场文书
食品安全承诺书
2014/05/22 职场文书
团队拓展活动总结
2014/08/27 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
JS高级程序设计之class继承重点详解
2022/07/07 Javascript