Tensorflow的学习笔记--滑动平均
滑动平均
滑动平均,又叫影子值,记录了每个参数一段时间内过往值的平均,增加了模型的泛化性。
针对所有参数:w和b。(像是给参数加了影子,参数变化,影子缓慢追随),具体的计算公式如下:
影子=衰减率*影子+(1-衰减率)* 参数
影子初值=参数初值
衰减率=
例如:
MOVING_AVERAGE_DECAY
为0.99,参数w1为0,轮数global_step
为0,w1的滑动平均值为0,参数w1更新为1.则:
w1滑动平均值=min(0.99,1/10)*0+(1-min(0.99,1/10))*1=0.9
轮数global_step为100是,参数w1更新为10,则:
w1滑动平均值=min(0.99,101/110)*0.9+(1-min(0.99,101/110))*10=0.826+0.818=1.644
再次运行:
w1滑动平均值=min(0.99,101/110)*1.644+(1-min(0.99,101/110))*10=2.328
再次运行:
w1平均值=2.956
使用tensorflow表示如下:
1 | ema=tf.train.ExponentialMovingAverage(衰减率MOVING_AVERAGE_DECAY,当前轮数global_step) |
我们使用代码来使用模拟上面的计算逻辑:
1 | #coding:utf-8 |
打印结果:
1 | [0.0, 0.0] |
可以看到平均值一直趋近于w1。