tensorflow 随笔---------指数衰减和平均和滑动平均

本文探讨了指数衰减和滑动平均两种学习率调整策略,解释了它们如何解决学习率过大或过小的问题,以及如何通过自动更新学习率提高模型训练效率和泛化能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么使用指数衰减学习率?

学习率过大,会导致待优化的参数在最小值附近波动不收敛;
学习率过小,会导致待优化的参数收敛缓慢。
使用指数衰减自动更新学习率

2.为什么使用滑动平均学习率?

滑动平均:记录了一段时间内模型中所有参数 w 和 b 各自的平均值。利用滑动平均值可以增强模型的泛化能力。

指数衰减

学习率计算公式如下:

Learning_rate=LEARNING_RATE_BASE*LEARNING_RATE_DECAY* LEARNING_RATE_BATCH_SIZE*golal_step/BATCH_SIZE

  #define current steps,note: global_step is untrainable
  global_step = tf.Variable(0, trainable=False)
    learning_rate = tf.train.exponential_decay(
        LEARNING_RATE_BASE,
        global_step,
        mnist.train.num_examples/BATCH_SIZE,
        LEARNING_RATE_DECAY,
        staircase=True
    )

 

其中, LEARNING_RATE_BASE 为学习率初始值, LEARNING_RATE_DECAY 为学习率衰减率,global_step 记
录了当前训练轮数,为不可训练型参数。学习率 learning_rate 更新频率为输入数据集总样本数除以每
次喂入样本数。若 staircase 设置为 True 时,表示 global_step/learning rate step 取整数,学习
率阶梯型衰减;若 staircase 设置为 false 时,学习率会是一条平滑下降的曲线。

滑动平均

滑动平均值(影子)计算公式:
影子 = 衰减率 * 影子 +(1 - 衰减率)* 参数
其中,衰减率 = min {MOVING AVERAGE DECAY ,1+ 轮数/(10+ 轮数)},影子初值=参数初值

ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
ema_op = ema.apply(tf.trainable_variables())

tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)\
    # ema_op = ema.apply(tf.trainable_variables())
with tf.control_dependencies([train_step, ema_op]):
     train_op = tf.no_op(name='train')

其中,ema.apply()函数实现对括号内参数求滑动平均,tf.trainable_variables()函数实现把所有
待训练参数汇总为列表。

with tf.control_dependencies([train_step, ema_op]):
train_op = tf.no_op(name='train')
其中,该函数实现将滑动平均和训练过程同步运行。查看模型中参数的平均值,可以用 ema.average()函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值