global_step

global_step常用于滑动平均模型和学习率的指数衰减模型中,其中tf.train.AdamOptimizer(lr).minimize(loss,global_step)函数会自动使该全局步数加一,若在该函数中未用global_step则步数一直为初始值不会发生改变,这样在滑动平均模型和指数衰减模型中便失去了作用,切记。

学习率的优化

当学习率过大时,无论迭代多少次,损失函数始终无法收敛到最小值,当学习率过小时,虽然能保证收敛性,但会大大降低优化速度,我们会需要更多轮的迭代才能达到一个比较理想的优化效果。针对这一问题,tensorflow提供了一种更加灵活的学习率设置方法——指数衰减法。tf.train.exponential_delay函数实现了指数衰减学习率。通过这个函数,可以先使较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐渐减小学习率,使得模型在训练后期更加稳定。该函数实现了以下功能:
decayed_learning_rate = learning_rate * decay_rate^(global_step/decay_steps)
decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设置好的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度。该函数可以设置staircase值选择不同的衰减方式,默认值为False,若设置为True则global_step/decay_steps被设置为整数,使得学习率成为一个阶梯函数。在这样设置下,decay_steps通常代表完整的使用一遍训练集所需要的迭代次数,即总样本数除以每一个batch中训练样本数。这种设置常用场景是每完整地过完一次训练数据,学习率就减小一次,这可以使得训练集中的所有数据对模型训练具有相等的作用。

global_step = tf.Variable(0)
#通过exponential_decay函数生成学习率
learning_rate = tf.train.exponential_decay(
	0.1, global_step, 100, 0.96, staircase=True)
#使用指数衰减学习率。在minimize函数中传入global_step将自动更新
#global_step参数,从而使学习率也得到相应的更新.
learning_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step)

上述代码设定了初始学习率为0.1, 因为指定了staircase=True, 所以每次训练100轮后学习率乘以0.96.一般来说初始学习率,衰减系数和衰减速度都是根据经验设置的。而且损失函数下降的速度和迭代结束之后的总损失的大小没有必然的联系,也就是说不能通过前几轮损失函数的下降速度来比较不同神经网络的效果。

猜你喜欢

转载自blog.csdn.net/qq_34116958/article/details/89060183
今日推荐