踩坑描述:
如果定义了warm Up学习率的衰减方式如下,
if args.decay_type == "cosine":
scheduler = WarmupCosineSchedule(optimizer, warmup_steps=args.warmup_steps, t_total=t_total)
else:
scheduler = WarmupLinearSchedule(optimizer, warmup_steps=args.warmup_steps, t_total=t_total)
如果后面训练时没有调用scheduler.step()
,但只要程序运行过上面定义的学习率衰减方式那一段,学习率就会变成0,导致loss从一开始就震荡,训练是毫无效果的!!
**
不调用Warm Up学习率就把定义它的衰减方式的部分注释掉!
**
执行上述定义衰减学习率方法之前,lr的显示如下,学习率为自定义的1e-4:
执行过定义衰减学习率的语句后,lr显示变成0,自定义的学习率赋值给了Initial_lr:
由于训练过程中又没有调用,所以学习率会一直保持0的状态,造成训练无效,loss不停震荡。