对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中的True,False条件判断实例分析
Jan 12 Python
Python的shutil模块中文件的复制操作函数详解
Jul 05 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
详解Python中的动态属性和特性
Apr 07 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
python selenium firefox使用详解
Feb 26 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
Python实现石头剪刀布游戏
Jan 20 Python
python基础之错误和异常处理
Oct 24 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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
Phpbean路由转发的php代码
2008/01/10 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
js 深拷贝函数
2008/12/04 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
Python协程的用法和例子详解
2017/09/09 Python
Python延时操作实现方法示例
2018/08/14 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
python监控nginx端口和进程状态
2019/09/06 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
幼儿园教师教育感言
2014/02/28 职场文书
剪彩仪式主持词
2014/03/19 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
2015年副班长工作总结
2015/05/15 职场文书
中学音乐课教学反思
2016/02/18 职场文书