У меня проблема с использованием оптимизатора LBFGS от pytorch с молнией.Я использую шаблон из здесь , чтобы начать новый проект, и вот код, который я пробовал (только обучающая часть):
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)
Оптимизатору LBFGS из pytorch требуется функция закрытия(см. здесь и здесь ), но я не знаю, как определить его внутри шаблона, особенно я не знаю, как данные пакета передаются оптимизатору.Я попытался определить пользовательскую функцию optimizer_step, но у меня есть некоторые проблемы с передачей пакета внутри функции закрытия.
Я буду очень благодарен за любой совет, который поможет мне решить эту проблему или укажет мне правильное направление.
Среда:
- Версия PyTorch: 1.2.0 + процессор
- Версия с подсветкой: 0.4.9
- Версия с пробиркой: 0.7.1