自己定义学习率的调整,以官网范例示范。
optimizer = optim.SGD(params = model.parameters(), lr=0.05)
lambda1 = lambda epoch:epoch // 10
lambda2 = lambda epoch:0.95 ** epoch
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])
发现会报错,如下图。
他只需要一个lambda函数。於是我们将其拆开看。
用lambda1去尝试。
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda1)
用lambda2去尝试。
scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lambda2)
我们也可以尝试自己去定义调整学习率的函数。
torch.optim.lr_scheduler.CyclicLR(optimizer, base_lr, max_lr, step_size_up=2000, step_size_down=None, mode='triangular', gamma=1.0, scale_fn=None, scale_mode='cycle', cycle_momentum=True, base_momentum=0.8, max_momentum=0.9, last_epoch=-1, verbose=False)
当我们在训练的过程中,在梯度为0时,不一定是最佳解也不一定是最大值,梯度会保持在一个最小值,导致训练非常缓慢停滞不前,那就是卡在了鞍点(Saddle Points)。
图片来源:https://www.twblogs.net/a/5c245d4ebd9eee16b4a7d124
如何解决鞍点这个问题,我们需要利用优化器搭配好的学习率,才能解决停滞在鞍点的问题。
学习率衰减的方式有很多种,我个人比较常用CosineAnnealingLR,他带有周期循环的学习率,较不易有卡在鞍点的机会发生。
学习率要搭配优化器做梯度下降,试图找到全局最佳解,但往往没有那麽容易,明天跟大家介绍优化器的比较。
今天要来介绍 gulp 如何与 bower 结合 这里必须新增一个套件 main-bower-fil...
Study Lab 总结 在这 30 天中介绍了许多 DevOps 的工具以及工作流程,若读者想要学...
// clear.c #include <stdio.h> int main() { p...
+++ title = "Day 13:vim 设定档" date = &quo...
▉估狗『各国 个资法』 就~如标题,既昨天的笔记,想看看,那各国的个资法是?? 然後就看到这个『隐私...