tensorflow-滑动平均模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow-滑动平均模型相关的知识,希望对你有一定的参考价值。

随机梯度下降算法训练时,使用滑动平均模型 可以提高模型健壮性。
在Tensorflow中提供了tf.train.ExponentialMovingAverage来实现滑动平均模型。在初始化ExponentialMovingAverage时,需要提供一个衰减率。控制模型更新速度,它对每个变量会维护一个影子变量,这个影子变量的初始值 就是相应变量的初始值 ,而每次运行变量更新时,影子变量的值会更新为:

技术分享图片
shadow_variable为影子变量,variable为待更新变量。
decay为模型更新的速度,越大,模型越稳定,一般为0.999。
为了使模型在训练前期可更新得更快,ExponentialMovingAverage还提供了num_updates参数来动态设置decay的大小。
如果,在ExponentialMovingAverage初始化时,提供了num_updates参数,那么每次使用衰减率将是:
技术分享图片

 #!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Fri Sep 28 10:00:44 2018

@author: myhaspl
@email:[email protected]
滑动平均模型
"""
from __future__ import division
import tensorflow as tf 
import numpy as np

def averageOp(shawv,v,decay,step):
    nowdecay=min(decay,(1+step)/(10+step))#step即num_updates
    return shawv*nowdecay+(1-nowdecay)*v

w=tf.Variable([0.,0.],dtype=tf.float32)
step=tf.Variable(0,dtype=tf.int32,trainable=False)

ema=tf.train.ExponentialMovingAverage(0.99,step)
maintainAverageOp=ema.apply([w])#更新w的操作,更新的方式是滑动平均算法
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    v,shawv,vstep=sess.run([w,ema.average(w),step])
    print averageOp(shawv,v,0.99,vstep)
    sess.run(tf.assign(w,np.array([2.,6.])))
    v,shawv,vstep=sess.run([w,ema.average(w),step])
    print averageOp(shawv,v,0.99,vstep)
    sess.run(maintainAverageOp)
    print sess.run([w,ema.average(w)])#ema.average(w)表示获取滑动平均值
[0. 0.]
[1.8       5.3999996]
[array([2., 6.], dtype=float32), array([1.8      , 5.3999996], dtype=float32)]

以上是关于tensorflow-滑动平均模型的主要内容,如果未能解决你的问题,请参考以下文章

78tensorflow滑动平均模型,用来更新迭代的衰减系数

tensorflow:实战Google深度学习框架第四章02神经网络优化(学习率,避免过拟合,滑动平均模型)

『TensorFlow』滑动平均

tensorflow:神经网络优化(ema,regularization)

tensorflow-正则化+指数衰减+滑动平均

运用自回归滑动平均模型灰色预测模型BP神经网络三种模型分别预测全球平均气温,并进行预测精度对比(附代码数据)