学习率对整个函数模型的优化起着至关重要的作用
最左边的图由于 learning rate 设置小了,可能需要大量时间才能找到全局最小值;中间的图表示 learning rate 设置的刚刚好,则很快就能找到全局最小值;最右边的图表示 learning rate 设置过大,可能造成 loss 忽大忽小,无法找到全局最小值
由此可以看出,选择合适的 learning rate 是很讲究技巧的。如下图所示,设置一个可以自动衰减的 learning rate 可能会在一定程度上加快优化
在 pytorch 中有一个函数可以帮助我们实现 learning rate decay
- class torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10,
- verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-8)
- # patience=10代表的是耐心值为10,
- # 当loss出现10次不变化时,即开始调用learning rate decay功能
- optimizer = torch.optim.SGD(model.parameters(),
- args.lr,
- momentum=args.momentum,
- weight_decay=args.weight_decay)
- scheduler = ReduceLROnPlateau(optimizer, 'min')
-
- for epoch in xrange(args.start_epoch, args.epochs):
- train(train_loder, model, criterion, optimizer, epoch)
- result_avg, loss_val = validate(val_loder, model, criterion, epoch)
- scheduler.step(loss_val)
- # 设置监听的是loss