tf.trarin

来源:互联网 发布:淘宝发货默认快递公司 编辑:程序博客网 时间:2024/05/22 03:05

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.99ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, step)    # 定义一个滑动平均的类emamaintain_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)
原创粉丝点击