MCPcopy Create free account
hub / github.com/MoonInTheRiver/DiffSinger / optimizer_closure

Method optimizer_closure

utils/pl_utils.py:1476–1510  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1474
1475 # wrap the forward step in a closure so second order methods work
1476 def optimizer_closure():
1477 # forward pass
1478 output = self.training_forward(
1479 split_batch, batch_idx, opt_idx, self.hiddens)
1480
1481 closure_loss = output[0]
1482 progress_bar_metrics = output[1]
1483 log_metrics = output[2]
1484 callback_metrics = output[3]
1485 self.hiddens = output[4]
1486 if closure_loss is None:
1487 return None
1488
1489 # accumulate loss
1490 # (if accumulate_grad_batches = 1 no effect)
1491 closure_loss = closure_loss / self.accumulate_grad_batches
1492
1493 # backward pass
1494 model_ref = self.get_model()
1495 if closure_loss.requires_grad:
1496 model_ref.backward(closure_loss, optimizer)
1497
1498 # track metrics for callbacks
1499 all_callback_metrics.append(callback_metrics)
1500
1501 # track progress bar metrics
1502 self.add_tqdm_metrics(progress_bar_metrics)
1503 all_log_metrics.append(log_metrics)
1504
1505 # insert after step hook
1506 if self.is_function_implemented('on_after_backward'):
1507 model_ref = self.get_model()
1508 model_ref.on_after_backward()
1509
1510 return closure_loss
1511
1512 # calculate loss
1513 loss = optimizer_closure()

Callers

nothing calls this directly

Calls 6

training_forwardMethod · 0.95
get_modelMethod · 0.95
add_tqdm_metricsMethod · 0.95
on_after_backwardMethod · 0.80
backwardMethod · 0.45

Tested by

no test coverage detected