class_docstr: MetricReporter is responsible of three things:
  
  #. Aggregate output from trainer, which includes model inputs, predictions,
     targets, scores, and loss.
  #. Calculate metrics using the aggregated output, and define how the metric
     is used to find best model
  #. Optionally report the metrics and aggregated output to various channels
  
  Attributes:
      lower_is_better (bool): Whether a lower metric indicates better performance.
          Set to True for e.g. perplexity, and False for e.g. accuracy. Default
          is False
      channels (List[Channel]): A list of Channel that will receive metrics and
          the aggregated trainer output then format and report them in any customized
          way.
  
  MetricReporter is tightly-coupled with metric aggregation and computation which
  makes inheritance hard to reuse the parent functionalities and attributes. Next
  step is to decouple the metric aggregation and computation vs metric reporting.
code: def aggregate_scores(self, batch_scores):
      self.aggregate_data(self.all_scores, batch_scores)
  
imports: from typing import Dict, List
  import numpy
  import torch
  from pytext.common.constants import BatchContext, DatasetFieldName, RawExampleFieldName, Stage
  from pytext.config.component import Component, ComponentType
  from pytext.config.pytext_config import ConfigBase
  from pytext.metric_reporters.channel import Channel, ConsoleChannel
  from pytext.metrics import RealtimeMetrics
  from pytext.utils import cuda
  from pytext.utils.meter import TimeMeter
label_desc: Use image node_id 8 for calling the MetricReporter obj's underlying member method code with example usage: obj.aggregate_scores(batch_scores) without return types