Sha*_*hai 3 python-3.x pytorch
使用 python 3.6 运行 pytorch 0.4.1 我遇到了这个问题:
我无法使用torch.save我的学习率调度程序,因为 python 不会腌制 lambda 函数:
lambda1 = lambda epoch: epoch // 30
scheduler = LambdaLR(optimizer, lr_lambda=lambda1)
torch.save(scheduler.state_dict(), 'scheduler.pth.tar')
Run Code Online (Sandbox Code Playgroud)
结果有错误
Run Code Online (Sandbox Code Playgroud)PicklingError: Can't pickle <function <lambda> at 0x7f7583fe92f0>: attribute lookup <lambda> on __main__ failed
如何保存我的调度程序?
我知道lambda1可以保存使用适当的函数而不是 lambda 函数,但是我需要一个 lambda 函数,因为我希望能够在定义此函数时对其进行控制(例如,我希望能够更改固定的 30在分母中)。
如何做到这一点并且仍然允许我保存调度程序?
如果希望保留torch.saveand 的默认行为,torch.load可以将 lambda 函数替换为一个类,例如:
class LRPolicy(object):
def __init__(self, rate=30):
self.rate = rate
def __call__(self, epoch):
return epoch // self.rate
Run Code Online (Sandbox Code Playgroud)
调度程序现在
scheduler = LambdaLR(optimizer, lr_lambda=LRPolicy(rate=30))
Run Code Online (Sandbox Code Playgroud)
现在可以torch.save编辑调度程序,torch.load而无需交替酸洗模块。
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |