class_docstr: Saves model topology, losses & metrics
class_docstr_tok: ["Saves","model","topology",",","losses","&","metrics"]
docstr: Log validation loss and custom metrics & log prediction samples
docstr_tok: ["Log","validation","loss","and","custom","metrics","&","log","prediction","samples"]
code: def after_epoch(self):
      "Log validation loss and custom metrics & log prediction samples"
      # Correct any epoch rounding error and overwrite value
      self._wandb_epoch = round(self._wandb_epoch)
      if self.log_preds and self.log_preds_every_epoch:
          self.log_predictions()
      wandb.log({"epoch": self._wandb_epoch}, step=self._wandb_step)
      wandb.log(
          {
              n: s
              for n, s in zip(
                  self.recorder.metric_names, self.recorder.log
              )
              if n not in ["train_loss", "epoch", "time"]
          },
          step=self._wandb_step,
      )
  
imports: from __future__ import annotations
  from ..basics import *
  from .progress import *
  from ..text.data import TensorText
  from ..tabular.all import TabularDataLoaders, Tabular
  from .hook import total_params
  from .tracker import SaveModelCallback
  import wandb
label_desc: Use image node_id 7 for calling the WandbCallback obj's underlying member method code with example usage: obj.after_epoch() without return types