Tensorflow笔记之神经网络进一步优化

      在前面已经介绍了神经网络优化的基本算法,通过梯度下降算法和反向传播算法。其中梯度下降算法学习率的设置尤为重要,因为它是控制参数更新的速度,决定了每次更新的幅度,如果幅度过大,那么可能导致参数在极优值得两侧来回移动。以J(x)=x{_{}}^{2}为例,如果优化中使用的学习率为1,那么整个优化过程如下表所示:

当学习率过大时,梯度下降算法的运行过程
轮数当前轮参数值梯度X学习率更新后参数值
15

 

2x5x1=10

5-10=-5
2-52x(-5)x1=-10-5-(-10)=5
35

2x5x1=10

 

5-10=-5

    从上表中可以看出,无论迭代进行多少轮,参数将在5和-5之间摇摆,不会收敛到一个极小值。相反 ,当学习率过小时,虽然能保证收敛性,但这会大大降低优化速度。我们需要更多轮迭代才能达到一个比较理想的优化效果。所以学习率既不能过大,也不能过小,为了解决学习率问题,Tensorflow提供了一种更加灵活的学习率设置方法————指数衰减法。通过tf.train.exponential_decay函数实现了指数衰减学习率。这个函数实现了下面代码的功能:

 

decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)

 其中decayed_learning_rate为每一轮优化时使用的学习率,learning_rate为事先设定好的初始学习率,decay_rate为衰减系数,decay_steps为衰减速度。下面给出了一段代码来示范如何在Tensorflow中使用该函数:

global_step=tf.Variable(0)
#通过expoential_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(...my loss...,global_step=global_step)

上述代码中设定学习率为0.1,因为制定了staircase=True,所以每训练100轮以后学习率乘0.96.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值