python - 每次重启后降低最大学习率
问题描述
我正在为基于计算机视觉的任务训练神经网络。对于优化器,我发现在整个训练中使用单一学习率并不理想,人们所做的是他们使用学习率调度程序以特定方式衰减学习率。所以为了做到这一点,我尝试了PyTorch's
CosineAnnealingWarmRestarts().
它的作用是它以余弦方式退火/降低初始学习率(由我们设置),直到它重新启动。在这个“重启”之后,学习率被设置回初始学习率,并且循环再次发生。这对我来说效果很好,但我想对其进行一些更改。我想改变学习率,每次重启后都会分配优化器,这样每次重启后优化器的最大学习率也会降低。这可以在 PyTorch 中完成吗?
解决方案
在我看来,一个直截了当的解决方案就是继承CosineAnnealingWarmRestarts
然后self.optimizer
在覆盖step
函数中更改其参数。在伪代码中,这将类似于
class myScheduler(torch.optim.lr_scheduler.CosineAnnealingWarmRestarts):
def __init__(self,
optimizer,
T_0,
T_mult=1,
eta_min=0,
last_epoch=-1):
#initialize base calss
super().__init__(.... blablabla ...)
def step(self):
#call step() from base class
#Do some book-keeping to determine if you've hit a restart
#now change optimizer lr for each parameter group
if some_condition:#condition like number of iterations, restarts, etc
self.optimizer.param_groups[i]['lr']*=some_coef
推荐阅读
- php - WooCommerce 从订单中获取状态已付款或免费跟踪
- weighted-average - If else 和 if 加权平均
- javascript - 自动清除多个输入字段
- flutter - 在颤动中更改滑块的拇指颜色
- php - 为什么 laravel 不监听端口,但在部署生产时表达需要?
- google-sheets - 多个条件下多个值求和的迭代公式
- apache-kafka - kafka - S3接收器连接器 - 没有找到辅助解串器
- swift - 在 Swift 中使用 Codable 解析 JSON 数据
- amazon-web-services - Application Load Balancer 的 cloudformation 模板参数是什么?或者如何在 cloudformation 模板中导出我的 Application Load Balancer?
- vscode-extensions - 在 MacOS 上验证时,运行 dafny 的 VS 代码挂起。我可以从 VScode 停止验证程序吗?