通过乘以一个指数衰减,保留变量的moving average
训练模型时,保留训练变量的moving average是有用的。平均的参数做验证的效果要优于直接用final trained的参数做的验证。
- apply()方法:为训练参数创建 shadow copy,并且在训练参数的shadow copy中加入moving average。apply()方法用在创建训练模型的过程中,保留moving average的操作则是在每一轮训练完成时完成。
- average()和average_name()方法可以得到变量的shadow copy的值以及名字。这个是用在构建验证模型的过程中,或是从checkpoint文件恢复变量的时候。可以利用这两个方法实现用shadow copy代替最终的训练值。
- moving average是用指数衰减计算的,shadow copy和它对应的训练变量的初始值相同,shadow copy的更新公式:
一般是0.999,0.9999等
- 模型验证时:
- average() 方法
- 当利用checkpoint时,用average_name()
# moving average似乎不再需要单独加在代码中,用Adam优化器就可以达到moving average的效果