2.3神经网络优化之滑动平均

滑动平均也叫影子值,记录了每一个参数一段时间内过往值的平均,增强模型的泛化性
针对所有的参数w和b,打个比方像是参数加了影子,影子随着参数的变化,也缓慢变化

在这里插入图片描述
在tensortflow里,我们用下面的代码去使用滑动平均
在这里插入图片描述
下面通过具体的代码去理解

import tensorflow as tf
#定义变量及滑动平均类
#定义一个32位浮点变量,初始值为0.0,这个代码就是不断更新w1参数,优化w1参数,滑动平均做w1的影子
w1 = tf.Variable(tf.constant(0,dtype=tf.float32))
#定义num_updates(nn的迭代轮数),初始值为0,不可被优化,这个参数不做优化
globa_step = tf.Variable(0,trainable=False)
#超参数滑动平均删减率为0.99
MOVING_AVERAGE_DECAY=0.99
#定义滑动平均ema
ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, globa_step)
#ema.apply后的括号里是更新列表,每次运行sess.run(ema_op)时,对更新列表中的元素求滑动平均值
#在实际应用中会使用tf.trainable_variables()自动将所有待训练的参数汇总为列表
#ema_op = ema.apply([w1]),ema_op为滑动平均节点
ema_op = ema.apply(tf.trainable_variables())

#查看不同迭代中变量取值的变化
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    #用ema.average(w1)获取滑动平均值
    print(sess.run([w1, ema.average(w1)]))#这是当前参数w1和w1滑动平均值
    #参数w1的值赋为1
    sess.run(tf.assign(w1,1))
    sess.run(ema_op)
    print(sess.run([w1,ema.average(w1)]))
#更新step和w1的值,模拟出100轮迭代后,参数w1变为10
    sess.run(tf.assign(globa_step,100))
    sess.run(tf.assign(w1,10))
    sess.run(ema_op)
    print(sess.run([w1,ema.average(w1)]))
#观察变化
    sess.run(ema_op)
    print(sess.run([w1, ema.average(w1)]))

    sess.run(ema_op)
    print(sess.run([w1, ema.average(w1)]))

    sess.run(ema_op)
    print(sess.run([w1, ema.average(w1)]))

    sess.run(ema_op)
    print(sess.run([w1, ema.average(w1)]))

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值