def toolbox_init( self, evaluation_formatter_parameters=None, validation_logger_mode="w", informer_silent=False, ): from longling.lib.clock import Clock from longling.lib.utilog import config_logging from longling.ML.toolkit.formatter import MultiClassEvalFormatter \ as Formatter from longling.ML.toolkit.monitor import MovingLoss, \ ConsoleProgressMonitor as ProgressMonitor self.toolbox = { "monitor": dict(), "timer": None, "formatter": dict(), } mod = self.mod cfg = self.mod.cfg # 4.1 todo 定义损失函数 # bp_loss_f 定义了用来进行 back propagation 的损失函数, # 有且只能有一个,命名中不能为 *_\d+ 型 assert self.loss_function is not None loss_monitor = MovingLoss(self.loss_function) # 4.1 todo 初始化一些训练过程中的交互信息 timer = Clock() progress_monitor = ProgressMonitor( loss_index=[name for name in self.loss_function], end_epoch=cfg.end_epoch - 1, silent=informer_silent) validation_logger = config_logging( filename=os.path.join(cfg.model_dir, "result.log"), logger="%s-validation" % cfg.model_name, mode=validation_logger_mode, log_format="%(message)s", ) # set evaluation formatter evaluation_formatter_parameters = {} \ if evaluation_formatter_parameters is None \ else evaluation_formatter_parameters evaluation_formatter = Formatter( logger=validation_logger, dump_file=mod.cfg.validation_result_file, **evaluation_formatter_parameters) self.toolbox["monitor"]["loss"] = loss_monitor self.toolbox["monitor"]["progress"] = progress_monitor self.toolbox["timer"] = timer self.toolbox["formatter"]["evaluation"] = evaluation_formatter
def toolbox_init( self, evaluation_formatter_parameters=None, validation_logger_mode="w", silent=False, ): from longling import path_append from longling.lib.clock import Clock from longling.lib.utilog import config_logging from longling.ML.toolkit import EpochEvalFMT as Formatter from longling.ML.toolkit import MovingLoss, ConsoleProgressMonitor as ProgressMonitor self.toolbox = { "monitor": dict(), "timer": None, "formatter": dict(), } mod = self.mod cfg = self.mod.cfg assert self.loss_function is not None loss_monitor = MovingLoss(self.loss_function) # 4 todo 初始化一些训练过程中的交互信息 timer = Clock() progress_monitor = ProgressMonitor( indexes={"Loss": [name for name in self.loss_function]}, values={"Loss": loss_monitor.losses}, silent=silent, player_type="epoch", total_epoch=cfg.end_epoch - 1) validation_logger = config_logging( filename=path_append(cfg.model_dir, "result.log"), logger="%s-validation" % cfg.model_name, mode=validation_logger_mode, log_format="%(message)s", ) # set evaluation formatter evaluation_formatter_parameters = {} \ if evaluation_formatter_parameters is None \ else evaluation_formatter_parameters evaluation_formatter = Formatter( logger=validation_logger, dump_file=mod.cfg.validation_result_file, **evaluation_formatter_parameters) self.toolbox["monitor"]["loss"] = loss_monitor self.toolbox["monitor"]["progress"] = progress_monitor self.toolbox["timer"] = timer self.toolbox["formatter"]["evaluation"] = evaluation_formatter
def get_default_toolbox(loss_function=None, evaluation_formatter_parameters=None, progress_monitor_parameters=None, validation_logger_mode="w", silent=False, configuration=None): # pragma: no cover """ New in version 1.3.16 todo: consider whether to keep it Notice ------ The developer who modify this document should simultaneously modify the related function in glue """ from longling import path_append from longling.lib.clock import Clock from longling.lib.utilog import config_logging from longling.ML.toolkit import EpochEvalFMT as Formatter from longling.ML.toolkit import MovingLoss, ConsoleProgressMonitor as ProgressMonitor cfg = configuration toolbox = { "monitor": dict(), "timer": None, "formatter": dict(), } loss_monitor = MovingLoss(loss_function) if loss_function else None timer = Clock() progress_monitor = ProgressMonitor( indexes={"Loss": [name for name in loss_function]} if loss_function else {}, values={"Loss": loss_monitor.losses} if loss_monitor else {}, silent=silent, **progress_monitor_parameters if progress_monitor_parameters is not None else {}) validation_logger = config_logging( filename=path_append(cfg.model_dir, "result.log") if hasattr( cfg, "model_dir") else None, logger="%s-validation" % cfg.model_name if hasattr(cfg, "model_name") else "model", mode=validation_logger_mode, log_format="%(message)s", ) # set evaluation formatter evaluation_formatter_parameters = {} \ if evaluation_formatter_parameters is None \ else evaluation_formatter_parameters evaluation_formatter = Formatter(logger=validation_logger, dump_file=getattr( cfg, "validation_result_file", False), **evaluation_formatter_parameters) toolbox["monitor"]["loss"] = loss_monitor toolbox["monitor"]["progress"] = progress_monitor toolbox["timer"] = timer toolbox["formatter"]["evaluation"] = evaluation_formatter return toolbox