python - Transformers 调度器和 Pytorch 调度器的区别
问题描述
Transformers 还为学习率提供了自己的调度器,例如get_constant_schedule
、get_constant_schedule_with_warmup
等。它们再次返回torch.optim.lr_scheduler.LambdaLR
(火炬调度器)。warmup_steps
两者之间的唯一区别是什么?
我们如何创建一个自定义的基于转换器的调度器,类似于其他的 Torch 调度器,如lr_scheduler.MultiplicativeLR
, lr_scheduler.StepLR
, lr_scheduler.ExponentialLR
?
解决方案
您可以通过在类中创建一个函数来创建自定义调度程序,该函数接受优化器及其状态字典并编辑其 param_groups 中的值。
要了解如何在一个类中构造它,只需看看 Pytorch 如何创建它的调度程序并使用相同的功能,只需根据自己的喜好更改功能即可。
我发现将是一个很好的参考的永久链接在这里
编辑评论后:
这就像您可以使用的模板
from torch.optim import lr_scheduler
class MyScheduler(lr_scheduler._LRScheduler # Optional inheritance):
def __init__(self, # optimizer, epoch, step size, whatever you need as input to lr scheduler, you can even use vars from LRShceduler Class that you can inherit from etc.):
super(MyScheduler, self).__init__(optimizer, last_epoch, verbose)
# Put variables that you will need for updating scheduler like gamma, optimizer, or step size etc.
self.optimizer = optimizer
def get_lr(self):
# How will you use the above variables to update the optimizer
for group in self.optimizer.param_groups:
group["lr"] = # Fill this out with updated optimizer
return self.optimizer
您可以添加更多功能以增加功能。或者你可以使用一个函数来更新你的学习率。这将接收优化器并将其更改为 optimizer.param_groups[0]["lr"] 并返回新的优化器。
推荐阅读
- android - 如何定期从 onSesorChanged() 传递值
- vue.js - 从 Vuetify 1.5 => 2 更新时 v-data-table 忽略模板
- colors - 更改 VS Code 命令面板突出显示颜色
- vue.js - 在 mixin 中添加组件 v-on 事件 (@mousenter)
- amazon-web-services - CloudWatch 如何处理计数器重置?
- sql - SQL 语句中的第一条记录
- reactjs - 在生产 React Native Expo 应用程序中登录到设备
- java - 验证 deleteObject 是否实际删除了 AWS S3 Java sdk 中的对象
- tensorflow - 只在 tensorflow 中通过自定义层传播一次
- r - 如何获取一个函数对应的Rd文档文件