TensorFlow的variables_to_restore函数

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函数,可以使在加载模型的时候将影子变量直接映射到变量的本身,所以我们在获取变量的滑动平均值的时候只需要获取到变量的本身值而不需要去获取影子变量。


  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

修炼之路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值