分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
在采用随机梯度下降算法训练神经网络时,使用 tf.train.ExponentialMovingAverage 滑动平均操作的意义在于提高模型在测试数据上的健壮性(robustness)。
tensorflow 下的 tf.train.ExponentialMovingAverage 需要提供一个衰减率(decay)。该衰减率用于控制模型更新的速度。该衰减率用于控制模型更新的速度,ExponentialMovingAverage 对每一个(待更新训练学习的)变量(variable)都会维护一个影子变量(shadow variable)。影子变量的初始值就是这个变量的初始值,
import tensorflow as tfv1 =tf.Variable(dtype=tf.float32, initial_value=0.)decay = .99num_updates = tf.Variable(0, trainable=False)ema = tf.train.ExponentialMovingAverage(decay=decay, num_updates=num_updates)update_var_list = [v1] # 定义更新变量列表ema_apply = ema.apply(update_var_list)with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run([v1, ema.average(v1)])) # [0.0, 0.0](此时 num_updates = 0 ⇒ decay = .1, ),shadow_variable = variable = 0. sess.run(tf.assign(v1, 5)) sess.run(ema_apply) print(sess.run([v1, ema.average(v1)])) # 此时,num_updates = 0 ⇒ decay =.1, v1 = 5; # shadow_variable = 0.1 * 0 + 0.9 * 5 = 4.5 ⇒ variable sess.run(tf.assign(num_updates, 10000)) sess.run(tf.assign(v1, 10)) sess.run(ema_apply) print(sess.run([v1, ema.average(v1)])) # decay = .99, # shadow_variable = 0.99 * 4.5 + .01*10 ⇒ 4.555 sess.run(ema_apply) print(sess.run([v1, ema.average(v1)])) # decay = .99 # shadow_variable = .99*4.555 + .01*10 = 4.609
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31