如何将lbfgs优化器与pytorch lightning一起使用?

如何将lbfgs优化器与pytorch lightning一起使用?,pytorch,Pytorch,我在与lightning一起使用pytorch的LBFGS优化器时遇到问题。 我使用来自的模板启动一个新项目,下面是我尝试的代码(仅培训部分): pytorch的LBFGS优化器需要一个闭包函数(请参见和),但我不知道如何在模板中定义它,特别是我不知道如何将批处理数据传递给优化器。我试图定义一个自定义优化器步骤函数,但在闭包函数中传递批处理时遇到了一些问题 我将非常感谢任何帮助我解决这个问题或为我指明正确方向的建议 环境: PyTorch版本:1.2.0+cpu Lightning版本:0.4

我在与lightning一起使用pytorch的LBFGS优化器时遇到问题。 我使用来自的模板启动一个新项目,下面是我尝试的代码(仅培训部分):

pytorch的LBFGS优化器需要一个闭包函数(请参见和),但我不知道如何在模板中定义它,特别是我不知道如何将批处理数据传递给优化器。我试图定义一个自定义优化器步骤函数,但在闭包函数中传递批处理时遇到了一些问题

我将非常感谢任何帮助我解决这个问题或为我指明正确方向的建议

环境:
  • PyTorch版本:1.2.0+cpu
  • Lightning版本:0.4.9
  • 试管版本:0.7.1

添加了对lbfgs optimizer的支持,现在不需要定义闭包函数。

为供将来参考,现在支持此功能。见和。
def training_step(self, batch, batch_nb):
    x, y = batch
    x = x.float()
    y = y.float()
    y_hat = self.forward(x)
    return {'loss': F.mse_loss(y_hat, y)}

def configure_optimizers(self):
    optimizer = torch.optim.LBFGS(self.parameters())
    return optimizer

def optimizer_step(self, epoch_nb, batch_nb, optimizer, optimizer_i):
    def closure():
        optimizer.zero_grad()
        l = self.training_step(batch, batch_nb)
        loss = l['loss']
        loss.backward()
        return loss

    optimizer.step(closure)