You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用scheduler.step()时MultiplicativeLR调度器运行异常如何解决

报错原因

MultiplicativeLR的lr_lambda参数要求传入可调用对象(函数),该函数需要接收当前epoch序号作为输入,返回对应epoch的学习率乘性系数。你直接传入了浮点数0.95,调度器执行step()时会尝试调用传入的lr_lambda计算系数,浮点数无法被调用,因此抛出TypeError: 'float' object is not callable错误。

其他学习率调度器(如StepLR、ExponentialLR)不报错,是因为这类调度器的衰减系数参数本身就要求传入浮点数值,参数类型匹配,因此不会触发该错误。

修复方案

将传入lr_lambda的浮点数替换为返回固定衰减系数的可调用对象即可,修改后的配置代码如下:

def configure_optimizers(self):
    opt = torch.optim.Adam(self.model.parameters(), lr=cfg.learning_rate)
    # 传入lambda匿名函数,每个epoch返回0.95的乘性衰减系数,实现每轮学习率降低5%的需求
    sch = torch.optim.lr_scheduler.MultiplicativeLR(
        opt, 
        lr_lambda=lambda epoch: 0.95
    )
    return [opt], [sch]

如果需要实现更复杂的衰减规则,只需要修改lr_lambda对应的函数逻辑即可,比如区分不同epoch区间返回不同的乘性系数。


内容的提问来源于stack exchange,提问作者etnamaid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:18:20