TensorFlow中滑动平均模型介绍
2017-10-11 21:47
204 查看
内容总结于《TensorFlow实战Google深度学习框架》
不知道大家有没有听过一阶滞后滤波法:
new_value=(1−a)×value+a×old_value
其中a的取值范围[0,1],具体就是:本次滤波结果=(1-a)本次采样值+a上次滤波结果,采用此算法的目的是:
1、降低周期性的干扰;
2、在波动频率较高的场合有很好的效果。
而在TensorFlow中提供了
TensorFlow下的
shadow_variable=decay×shadow_variable+(1−decay)×variable
上述公式与之前介绍的一阶滞后滤波法的公式相比较,会发现有很多相似的地方,从名字上面也可以很好的理解这个简约不简单算法的原理:平滑、滤波,即使数据平滑变化,通过调整参数来调整变化的稳定性。
在滑动平滑模型中, decay 决定了模型更新的速度,越大越趋于稳定。实际运用中,decay 一般会设置为十分接近 1 的常数(0.999或0.9999)。为了使得模型在训练的初始阶段更新得更快,ExponentialMovingAverage 还提供了 num_updates 参数来动态设置 decay 的大小:
decay=min{decay,1+num_updates10+num_updates}
用一段书中代码带解释如何使用滑动平均模型:
output:
不知道大家有没有听过一阶滞后滤波法:
new_value=(1−a)×value+a×old_value
其中a的取值范围[0,1],具体就是:本次滤波结果=(1-a)本次采样值+a上次滤波结果,采用此算法的目的是:
1、降低周期性的干扰;
2、在波动频率较高的场合有很好的效果。
而在TensorFlow中提供了
tf.train.ExponentialMovingAverage来实现滑动平均模型,在采用随机梯度下降算法训练神经网络时,使用其可以提高模型在测试数据上的健壮性(robustness)。
TensorFlow下的
tf.train.ExponentialMovingAverage需要提供一个衰减率decay。该衰减率用于控制模型更新的速度。该衰减率用于控制模型更新的速度,ExponentialMovingAverage 对每一个待更新的变量(variable)都会维护一个影子变量(shadow variable)。影子变量的初始值就是这个变量的初始值,
shadow_variable=decay×shadow_variable+(1−decay)×variable
上述公式与之前介绍的一阶滞后滤波法的公式相比较,会发现有很多相似的地方,从名字上面也可以很好的理解这个简约不简单算法的原理:平滑、滤波,即使数据平滑变化,通过调整参数来调整变化的稳定性。
在滑动平滑模型中, decay 决定了模型更新的速度,越大越趋于稳定。实际运用中,decay 一般会设置为十分接近 1 的常数(0.999或0.9999)。为了使得模型在训练的初始阶段更新得更快,ExponentialMovingAverage 还提供了 num_updates 参数来动态设置 decay 的大小:
decay=min{decay,1+num_updates10+num_updates}
用一段书中代码带解释如何使用滑动平均模型:
import tensorflow as tf v1 = tf.Variable(0, dtype=tf.float32)//初始化v1变量 step = tf.Variable(0, trainable=False) //初始化step为0 ema = tf.train.ExponentialMovingAverage(0.99, step) //定义平滑类,设置参数以及step maintain_averages_op = ema.apply([v1]) //定义更新变量平均操作 with tf.Session() as sess: # 初始化 init_op = tf.global_variables_initializer() sess.run(init_op) print sess.run([v1, ema.average(v1)]) # 更新变量v1的取值 sess.run(tf.assign(v1, 5)) sess.run(maintain_averages_op) print sess.run([v1, ema.average(v1)]) # 更新step和v1的取值 sess.run(tf.assign(step, 10000)) sess.run(tf.assign(v1, 10)) sess.run(maintain_averages_op) print sess.run([v1, ema.average(v1)]) # 更新一次v1的滑动平均值 sess.run(maintain_averages_op) print sess.run([v1, ema.average(v1)])
output:
[0.0, 0.0] [5.0, 4.5] [10.0, 4.5549998] [10.0, 4.6094499]
相关文章推荐
- tensorflow 滑动平均模型
- 78、tensorflow滑动平均模型,用来更新迭代的衰减系数
- tensorflow 下的滑动平均模型 —— tf.train.ExponentialMovingAverage
- 78、tensorflow滑动平均模型,用来更新迭代的衰减系数
- Tensorflow深度学习之九:滑动平均模型
- tensorflow--滑动平均模型
- TensorFlow实战系列8--滑动平均模型
- Tensorflow中提供tf.train.ExponentialMovingAverage函数实现(滑动平均模型)
- Tensorflow 实战google深度学习框架 07 滑动平均模型
- TensorFlow优化之滑动平均模型
- TensorFlow 滑动平均的示例代码
- 滑动平均模型
- (Tensorflow之六)滑动平均模型ExponentialMovingAverage
- 神经网络的滑动平均模型
- 金融时间序列分析:7. MA滑动平均模型
- Tensorflow中基本概念及神经网络模型的介绍
- LSTM 递归神经网络 基本结构 及 TensorFlow 示例模型介绍
- Tensorflow 实战 google 深度学习框架 笔记(一)滑动模型
- 字符级卷积神经网络(Char-CNN)实现文本分类--模型介绍与TensorFlow实现
- tensorflow07 《TensorFlow实战Google深度学习框架》笔记-04-05滑动平均模型