code: def add_batch_stats(
      self, n_batches, preds, targets, scores, loss, m_input, **context
  ):
      super().add_batch_stats(
          n_batches, preds, targets, scores, None, m_input, **context
      )
      self.all_loss["all_loss"].append(float(loss[0]))
  
      custom_losses = loss[1].keys()
      for loss_name in custom_losses:
          vals = self.all_loss[loss_name]
          # samplewise losses are stored as multi-element tensors, so need to separate cases
          if "samplewise" in loss_name:
              vals.append(loss[1][loss_name].data.cpu().numpy())
          else:
              vals.append(float(loss[1][loss_name]))
  
imports: from collections import defaultdict
  from typing import Dict, List
  import numpy
  import torch
  from pytext.common.constants import BatchContext, DatasetFieldName, Stage
  from pytext.data.tensorizers import Tensorizer
  from pytext.metric_reporters.channel import ConsoleChannel
  from pytext.metric_reporters.seq2seq_compositional import CompositionalSeq2SeqFileChannel, Seq2SeqCompositionalMetricReporter
  from pytext.metric_reporters.seq2seq_metric_reporter import Seq2SeqFileChannel, Seq2SeqMetricReporter
  from pytext.metric_reporters.seq2seq_utils import stringify
  from pytext.metrics import safe_division
  from pytext.metrics.mask_metrics import compute_length_metrics
  from pytext.metrics.seq2seq_metrics import MaskedSeq2SeqTopKMetrics
label_desc: Use image node_id 4 for calling the MaskedSeq2SeqTopKMetricReporter obj's underlying member method code with example usage: obj.add_batch_stats(n_batches, preds, targets, scores, loss, m_input) without return types