Pytorch 手枪训练中从LBFGS到ADAM optimizer的切换

Pytorch 手枪训练中从LBFGS到ADAM optimizer的切换,pytorch,Pytorch,我想在训练的中间切换优化器 从LBFGS到亚当。 下面是我写的代码 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(devic

我想在训练的中间切换优化器 从LBFGS到亚当。 下面是我写的代码

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, lb, li = problem_formulation(x, t, x_Array,t_Array,bndry,pi)
          lg.backward()
          lb.backward()
          li.backward()
          optimizerAdam.step()
          loss_SUM += lg.item()+lb.item()+li.item()
              
        else:
          optimizerAdam.zero_grad()
          lg, lb, li = problem_formulation(x, t, x_Array,t_Array,bndry,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()}
optimizer=optim.LBFGS(model.parameters(),lr=0.003)
第一次使用\u Adam\u optim\u=True
使用_LBFGS_optim=True
对于范围内的历元(30000):
损失总和=0
对于枚举(GridLoader)中的i,(x,t):
x=x.to(设备)
t=t.to(装置)
如果使用_LBFGS _optim:
def closure():
optimizer.zero_grad()
lg,lb,li=问题_公式(x,t,x_数组,t_数组,bndry,pi)
总损耗=lg+lb+li
损失总计向后(保留图=真)
退货损失总额
损失=优化器步骤(关闭)
损失金额+=损失金额。项目()
elif首次使用Adam_optim_:
首次使用\u Adam\u optim\u=False
optimizerAdam=optim.Adam(model.parameters(),lr=0.0003)
model.load_state_dict(检查点['model'])
优化RADAM.zero_grad()
lg,lb,li=问题_公式(x,t,x_数组,t_数组,bndry,pi)
lg.backward()
lb.向后()
李,倒退()
优化radam.step()
损失金额+=lg.项目()+lb.项目()+li.项目()
其他:
优化RADAM.zero_grad()
lg,lb,li=问题_公式(x,t,x_数组,t_数组,bndry,pi)
lg.backward()
lb.向后()
李,倒退()
优化radam.step()
损失金额+=lg.项目()+lb.项目()+li.项目()
如果损失金额