code: def create_metric(
      out,
      label,
      architecture=None,
      topk=5,
      classes_num=1000,
      use_distillation=False,
      mode="train",
  ):
      """
      Create measures of model accuracy, such as top1 and top5
  
      Args:
          out(variable): model output variable
          feeds(dict): dict of model input variables(included label)
          topk(int): usually top5
          classes_num(int): num of classes
          use_distillation(bool): whether to use distillation training
          mode(str): mode, train/valid
  
      Returns:
          fetchs(dict): dict of measures
      """
      # if architecture["name"] == "GoogLeNet":
      #     assert len(out) == 3, "GoogLeNet should have 3 outputs"
      #     out = out[0]
      # else:
      #     # just need student label to get metrics
      #     if use_distillation:
      #         out = out[1]
      softmax_out = F.softmax(out)
  
      fetchs = OrderedDict()
      # set top1 to fetchs
      top1 = paddle.metric.accuracy(softmax_out, label=label, k=1)
      # set topk to fetchs
      k = min(topk, classes_num)
      topk = paddle.metric.accuracy(softmax_out, label=label, k=k)
  
      # multi cards' eval
      if mode != "train" and paddle.distributed.get_world_size() > 1:
          top1 = (
              paddle.distributed.all_reduce(
                  top1, op=paddle.distributed.ReduceOp.SUM
              )
              / paddle.distributed.get_world_size()
          )
          topk = (
              paddle.distributed.all_reduce(
                  topk, op=paddle.distributed.ReduceOp.SUM
              )
              / paddle.distributed.get_world_size()
          )
  
      fetchs["top1"] = top1
      topk_name = "top{}".format(k)
      fetchs[topk_name] = topk
  
      return fetchs
  
label_desc: Use image node_id 1 for calling a global function with example usage: create_metric(out, label, architecture, topk, classes_num, use_distillation, mode) and returns: fetchs