in grok/training.py [0:0]
def training_step(self, batch, batch_idx):
"""
Used by pytorch_lightning
Runs one forward training pass on one batch
:param batch: The batch of equations to process
:param batch_idx: which batch this is in the epoch.
:returns: a dict with loss, accuracy, lr, probabilities of solutions,
attentions, and values
"""
if batch_idx == 0:
self.training_epoch_start_time = time.time()
self.fwd_time_in_epoch = 0
start = time.time()
loss, accuracy, coeff, x_lhs, y_hat_rhs, attentions, values = self._step(
batch=batch, batch_idx=batch_idx, train=True
)
self.fwd_time_in_epoch += time.time() - start
schedulers = self.trainer.lr_schedulers[0]
if self.current_epoch != self.next_train_epoch_to_log:
return {"loss": loss}
lr = schedulers["scheduler"].optimizer.param_groups[0]["lr"]
output = {
"loss": loss,
"partial_train_loss": coeff * loss,
"partial_train_accuracy": coeff * accuracy,
"learning_rate": torch.tensor([lr]),
"y_hat_rhs": y_hat_rhs,
"partial_attentions": attentions,
"partial_values": values,
}
if self.current_epoch == 0:
output["x_lhs"] = x_lhs
return output