tf.trarin

tf.train.ExponentialMovingAverage(decay, num_updates=None)

step = tf.Variable(0, trainable=False)
var1 = tf.Variable(0, dtype=tf.float32)
var2 = tf.Variable(0, dtype=tf.float32)
MOVING_AVERAGE_DECAY = 0.99
ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, step)    
# 定义一个滑动平均的类ema
maintain_averages_op = ema.apply([var1, var2])
# 对需要更新的参数条用ema的apply方法
with tf.Session() as sess:
    init_op = tf.global_variables_initializer()
    sess.run(init_op)
    sess.run([tf.assign(var1, 5), tf.assing(var2, 10)])
    sess.run(maintain_averages_op)    # var1=0.1*0+0.9*5=4.5, var2=0.1*0+0.9*10=9
    # sess.run()使得所有的变量更新
    sess.run(tf.assign(step, 100000))
    sess.run(maintain_averages_op)    # var1=0.01*4.5+0.99*5, var2=0.01*9+0.99*5
    print(sess.run(var1, var2, [ema.average(var1), ema.average(var2)]))    # =>[5, 10, 4.505001, 9.1010002]
    # 滑动平均不会改变变量本身的值(var1=5,var2=10),而是维护一个影子变量来记录其滑动平均值,可以条用ema的average方法得到其影子值

tf.train.exponential_decay(learning_rate, global_step, decay_steps, decat_rate, staircase=False)

指数衰减学习率
学习率决定了参数每次更新的幅度,如果学习率过大,会导致参数在最优值两侧来回移动;如果学习率过小,会大大降低优化速度。Tensorflow中的tf.train.expontial_decay实现了指数衰减学习率,其更新公式为:

dacay_learning_rate=learning_ratedecay_rateglobal_stepdecay_steps

decay_step通常设置为完整使用一遍训练数据所需要的迭代轮数,即 BATCH_SIZE
tf.train.expontial_decay函数中参数staircas设置为True时,会对 globa_stepdecay_steps 取整,使得学习率是迭代轮数的阶梯函数,由参数更新公式:
w=ww+i:i+BATCH_SIZEJ(w)

只有遍历完一遍样本数据,学习率才减小一次,即所有训练数据对模型训练(参数更新)有同等的作用。当staircase设置为False(默认)时,学习率是连续函数。

global_step = tf.Variable(0)
learning_rate = tf.train.exponential_decay(0.05, global_step, 100, 0.99, staircase=True)
# 在minimize中传入global_step将自动更新global_step参数,从而使得学习率得到相应更新。
train_step = tf.train.GradentDescenOptimizer(learning_rate).minimize(loss, global_step=global_step)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值