class_docstr: 该 callback 不直接进行使用，作为其它相关 callback 的父类使用，如果 callback 有使用 monitor 可以继承该函数里面实现了
  （1）判断 monitor 合法性；（2）在需要时， 根据 trainer 的 monitor 设置自己的 monitor 名称。
  
  :param monitor: 监控的 metric 值：
  
      * 为 ``None``
       将尝试使用 :class:`~fastNLP.core.controllers.Trainer` 中设置 `monitor` 值（如果有设置）；
      * 为 ``str``
       尝试直接使用该名称从 ``evaluation`` 结果中寻找，如果在 ``evaluation`` 结果中没有找到完全一致的名称，将
       使用 最长公共字符串算法 从 ``evaluation`` 结果中找到最匹配的那个作为 ``monitor`` ；
      * 为 :class:`Callable`
       接受参数为 ``evaluation`` 的结果(字典类型)，返回一个 ``float`` 值作为 ``monitor`` 的结果，如果当前结果中没有相关
       的 ``monitor`` 值请返回 ``None`` ；
  :param larger_better: monitor 是否为越大越好；
  :param must_have_monitor: 这个 callback 是否必须有 monitor 设置。如果设置为 ``True`` ，且没检测到设置 monitor 会报错；
docstr: 如果本身的 monitor 没有设置，则根据 Trainer 中的 monitor 设置 monitor 。
  同时对于必须要有 monitor 设置的 callback ，该函数会进行检查。
  
  :param trainer:
  :param driver:
  :return:
docstr_tok: ["\u5982\u679c\u672c\u8eab\u7684","monitor","\u6ca1\u6709\u8bbe\u7f6e\uff0c\u5219\u6839\u636e","Trainer","\u4e2d\u7684","monitor","\u8bbe\u7f6e","monitor","\u3002","\u540c\u65f6\u5bf9\u4e8e\u5fc5\u987b\u8981\u6709","monitor","\u8bbe\u7f6e\u7684","callback","\uff0c\u8be5\u51fd\u6570\u4f1a\u8fdb\u884c\u68c0\u67e5\u3002",":","param","trainer",":",":","param","driver",":",":","return",":"]
code: def on_after_trainer_initialized(self, trainer, driver):
      """
      如果本身的 monitor 没有设置，则根据 Trainer 中的 monitor 设置 monitor 。
      同时对于必须要有 monitor 设置的 callback ，该函数会进行检查。
  
      :param trainer:
      :param driver:
      :return:
      """
      if self.monitor is None and trainer.monitor is not None:
          self.set_monitor(
              monitor=trainer.monitor,
              larger_better=trainer.larger_better,
          )
      if self.must_have_monitor and self.monitor is None:
          raise RuntimeError(
              f"No `monitor` is set for {self.log_name}. "
              f"You can set it in the initialization or through Trainer."
          )
  
imports: from typing import Dict, Union, Any
  from abc import ABC
  import functools
  from fastNLP.core.utils import apply_to_collection
  from fastNLP.core.callbacks import Callback
  from fastNLP.core.callbacks.utils import _get_monitor_value
  from fastNLP.core.log import logger
  from fastNLP.core.utils.utils import _check_valid_parameters_number
label_desc: Use image node_id 2 for calling the HasMonitorCallback obj's underlying member method code with example usage: obj.on_after_trainer_initialized(trainer, driver) without return types