code: def on_stage_start(self, stage, epoch):
      if stage != sb.Stage.TRAIN:
          if self.hparams.enhance_weight > 0:
              self.enh_metrics = self.hparams.enhance_stats()
              self.stoi_metrics = self.hparams.estoi_stats()
              self.pesq_metrics = self.hparams.pesq_stats()
              self.composite_metrics = self.hparams.composite_stats()
  
          if self.hparams.mimic_weight > 0:
              self.mimic_metrics = self.hparams.mimic_stats()
  
          if self.hparams.ctc_weight > 0 or self.hparams.seq_weight > 0:
              self.err_rate_metrics = self.hparams.err_rate_stats()
  
      # Freeze models before training
      else:
          for model in self.hparams.frozen_models:
              if (
                  hasattr(self.hparams, "unfreeze_epoch")
                  and epoch >= self.hparams.unfreeze_epoch
                  and (
                      not hasattr(self.hparams, "unfrozen_models")
                      or model in self.hparams.unfrozen_models
                  )
              ):
                  self.modules[model].train()
                  for p in self.modules[model].parameters():
                      p.requires_grad = True
              else:
                  self.modules[model].eval()
                  for p in self.modules[model].parameters():
                      p.requires_grad = False
  
imports: import os
  import sys
  import torch
  import torchaudio
  import logging
  import speechbrain
  from pesq import pesq
  from pystoi import stoi
  from composite_eval import eval_composite
  from hyperpyyaml import load_hyperpyyaml
  from speechbrain.utils.data_utils import undo_padding
  from speechbrain.utils.distributed import run_on_main, if_main_process
label_desc: Use image node_id 6 for calling the MTLbrain obj's underlying member method code with example usage: obj.on_stage_start(stage, epoch) without return types