微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在pytorch训练期间,从LBFGS切换到ADAM优化器

如何解决在pytorch训练期间,从LBFGS切换到ADAM优化器

我想在培训过程中切换优化器 从LBFGS到Adam。 下面是我编写的代码

optimizer = optim.LBFGS(model.parameters(),lr=0.003)
Use_Adam_optim_FirstTime=True
Use_LBFGS_optim=True

for epoch in range(30000):
    loss_SUM = 0
    for i,(x,t) in enumerate(GridLoader):
        x = x.to(device)
        t = t.to(device)

        if Use_LBFGS_optim:
          def closure():
            optimizer.zero_grad()
            lg,lb,li = problem_formulation(x,t,x_Array,t_Array,bndry,pi)
            loss_total=lg+ lb+ li
            loss_total.backward(retain_graph=True)
            return loss_total
          loss_out=optimizer.step(closure)
          loss_SUM+=loss_out.item()
        
        elif Use_Adam_optim_FirstTime:
          Use_Adam_optim_FirstTime=False
          optimizerAdam = optim.Adam(model.parameters(),lr=0.0003)
          model.load_state_dict(checkpoint['model'])
          optimizerAdam.zero_grad()
          lg,pi)
          lg.backward()
          lb.backward()
          li.backward()
          optimizerAdam.step()
          loss_SUM += lg.item()+lb.item()+li.item()
              
        else:
          optimizerAdam.zero_grad()
          lg,pi)
          lg.backward()
          lb.backward()
          li.backward()
          optimizerAdam.step()
          loss_SUM += lg.item()+lb.item()+li.item()
            
    if loss_SUM<.3 and use_LBFGS_optim == True:
      Use_LBFGS_optim=False
      checkpoint = {'model': model.state_dict(),'optimizer': optimizer.state_dict()}

我的问题是:

关于关闭功能

(1)有什么方法可以从闭包函数返回多个变量?

(2)有没有一种方法可以使我在闭包函数中倒退三个而不是一个

(3)为什么需要在关闭函数的loss_total.backward(retain_graph = True)中将keep_graph设置为True

(4)有时,关闭函数的loss_SUM接近1e + 29。有办法避免这个问题吗?

#-----------------------------

关于从LBFGS到Adam的切换:

(5)当loss_SUM

将优化器从LBFGS切换到Adam的正确方法是什么

一般来说,以上代码有什么问题,我该如何改进?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。