ExponentialMovingAverage()对每一个变量会维护一个影子变量shadow variable 这个影子变量的初始值就是相应变量的初始值,而每次运行变量跟新的时候影子变量就会跟新为:
shadow_variable=decay*shadow_variable+(1-decay)*variable
shadow_variable是影子变量,decay是衰减率,variable为变量准备要跟新的值。
指数加权平均算法的原理
TensorFlow中的滑动平均模型使用的是滑动平均(Moving Average)算法,又称为指数加权移动平均算法(exponenentially weighted average),这也是ExponentialMovingAverage()函数的名称由来。
先来看一个简单的例子,这个例子来自吴恩达老师的DeepLearning课程,个人强烈推荐初学者都看一下。
开始例子。首先这是一年365天的温度散点图,以天数为横坐标,温度为纵坐标,你可以看见各个小点分布在图上,有一定的曲线趋势,但是并不明显
接着,如果我们要看出这个温度的变化趋势,很明显需要做一点处理,也即是我们的主题,用滑动平均算法处理。
首先给定一个值v0,然后我们定义每一天的温度是a1,a2,a3·····
接着,我们计算出v1,v2,v3····来代替每一天的温度ÿ