优化算法的简洁实现

动量法

思想:

动量法使用了指数加权移动平均的思想。它将过去时间步的梯度做了加权平均,且权重按时间步指数衰减。

代码:

在Gluon中,只需要在Trainer实例中通过momentum来指定动量超参数即可使用动量法。


d2l.train_gluon_ch7('sgd', {'learning_rate': 0.004, 'momentum': 0.9},
                    features, labels)

AdaGrad算法

思想:

AdaGrad算法在迭代过程中不断调整学习率,并让目标函数自变量中每个元素都分别拥有自己的学习率。
使用AdaGrad算法时,自变量中每个元素的学习率在迭代过程中一直在降低(或不变)。

代码:

通过名称为“adagrad”的Trainer实例,我们便可使用Gluon提供的AdaGrad算法来训练模型。

d2l.train_gluon_ch7('adagrad', {'learning_rate': 0.1}, features, labels)

RMSProp算法

思想:

RMSProp算法和AdaGrad算法的不同在于,RMSProp算法使用了小批量随机梯度按元素平方的指数加权移动平均来调整学习率。

代码:

通过名称为“rmsprop”的Trainer实例,我们便可使用Gluon提供的RMSProp算法来训练模型。注意,超参数 γ 通过gamma1指定。

d2l.train_gluon_ch7('rmsprop', {'learning_rate': 0.01, 'gamma1': 0.9},
                    features, labels)

AdaDelta算法

思想:

AdaDelta算法没有学习率超参数,它通过使用有关自变量更新量平方的指数加权移动平均的项来替代RMSProp算法中的学习率。

代码:

通过名称为“adadelta”的Trainer实例,我们便可使用Gluon提供的AdaDelta算法。它的超参数可以通过rho来指定。

d2l.train_gluon_ch7('adadelta', {'rho': 0.9}, features, labels)

Adam算法

思想:

Adam算法在RMSProp算法的基础上对小批量随机梯度也做了指数加权移动平均。
Adam算法使用了偏差修正。

代码:

通过名称为“adam”的Trainer实例,我们便可使用Gluon提供的Adam算法。

d2l.train_gluon_ch7('adam', {'learning_rate': 0.01}, features, labels)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值