您的位置:首页 > 其它

tensorflow 滑动平均模型

2017-08-30 15:23 357 查看


注:

1.影子变量的功能是记录滑动平均值,滑动平均值并不会改变原始变量的值

2.decay的更新并不是递归...

import tensorflow as tf
v1 = tf.Variable(0, dtype = tf.float32)#定义变量用来计算滑动平均,初始化为0,shadow_variable = 0
step = tf.Variable(0, trainable = False)#定义滑动平均的step,初始化为0

#定义滑动平均的类,初始化时给定衰减率0.99,step为0
ema = tf.train.ExponentialMovingAverage(0.99, step)
maintain_average_op = ema.apply([v1])

with tf.Session() as sess:
#初始化变量
init_op = tf.initialize_all_variables()
sess.run(init_op)

#获取初始化之后的滑动平均值
print(sess.run([v1, ema.average(v1)]))  #输出[0.0, 0.0]

sess.run(tf.assign(v1, 5))#更新v1的值到5
sess.run(maintain_average_op)#更新v1的滑动平均值,decay = min{0.99, (1 + 0) / (10 + 0)} = 0.1, shadow_variable = 0.1 * 0 + 0.9 * 5 = 4.5
print(sess.run([v1, ema.average(v1)])) #输出[5.0, 4.5]

sess.run(tf.assign(step, 1000))#更新step为1000
sess.run(tf.assign(v1, 10))#更新v1的值为10
sess.run(maintain_average_op)  # 更新v1的滑动平均值,decay = min{0.99, (1 + 1000) / (10 + 1000)} = 0.99, shadow_variable = 0.99 * 4.5 + 0.01 * 10 = 4.555
print(sess.run([v1, ema.average(v1)]))  # 输出[10, 4.5549998]

sess.run(maintain_average_op)  # 更新v1的滑动平均值,decay = min{0.99, (1 + 1000) / (10 + 1000)} = 0.99, shadow_variable = 0.99 * 4.555 + 0.01 * 10 = 4.60945
print(sess.run([v1, ema.average(v1)]))  # 输出[10, 4.6094499]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: