def numerical_check(_net, _cfg: Configuration, train_data, test_data, dump_result=False): # pragma: no cover ctx = _cfg.ctx batch_size = _cfg.batch_size _net.initialize(ctx=ctx) bp_loss_f = get_bp_loss(**_cfg.loss_params) loss_function = {} loss_function.update(bp_loss_f) from longling.ML.MxnetHelper.glue import module from longling.ML.toolkit import EvalFormatter as Formatter from longling.ML.toolkit import MovingLoss from tqdm import tqdm loss_monitor = MovingLoss(loss_function) progress_monitor = tqdm if dump_result: from longling import config_logging validation_logger = config_logging( filename=path_append(_cfg.model_dir, "result.log"), logger="%s-validation" % _cfg.model_name, mode="w", log_format="%(message)s", ) evaluation_formatter = Formatter( logger=validation_logger, dump_file=_cfg.validation_result_file, ) else: evaluation_formatter = Formatter() # train check trainer = module.Module.get_trainer( _net, optimizer=_cfg.optimizer, optimizer_params=_cfg.optimizer_params, select=_cfg.train_select ) for epoch in range(_cfg.begin_epoch, _cfg.end_epoch): for batch_data in progress_monitor(train_data, "Epoch: %s" % epoch): fit_f( net=_net, batch_size=batch_size, batch_data=batch_data, trainer=trainer, bp_loss_f=bp_loss_f, loss_function=loss_function, loss_monitor=loss_monitor, ctx=ctx, ) if epoch % 1 == 0: if epoch % 1 == 0: print( evaluation_formatter( epoch=epoch, loss_name_value=dict(loss_monitor.items()), eval_name_value=eval_f(_net, test_data, ctx=ctx), extra_info=None, dump=True, )[0] )
def numerical_check(_net, _cfg: Configuration, train_data, test_data, dump_result=False, reporthook=None, final_reporthook=None): # pragma: no cover ctx = _cfg.ctx batch_size = _cfg.batch_size _net.initialize(ctx=ctx) bp_loss_f = get_bp_loss(**_cfg.loss_params) loss_function = {} loss_function.update(bp_loss_f) from longling.ML.MxnetHelper.glue import module from longling.ML.toolkit import EpochEvalFMT as Formatter from longling.ML.toolkit import MovingLoss from tqdm import tqdm loss_monitor = MovingLoss(loss_function) progress_monitor = tqdm if dump_result: from longling import config_logging validation_logger = config_logging( filename=path_append(_cfg.model_dir, "result.log"), logger="%s-validation" % _cfg.model_name, mode="w", log_format="%(message)s", ) evaluation_formatter = Formatter( logger=validation_logger, dump_file=_cfg.validation_result_file, ) else: evaluation_formatter = Formatter() # train check trainer = module.Module.get_trainer(_net, optimizer=_cfg.optimizer, optimizer_params=_cfg.optimizer_params, select=_cfg.train_select) for epoch in range(_cfg.begin_epoch, _cfg.end_epoch): for i, batch_data in enumerate( progress_monitor(train_data, "Epoch: %s" % epoch)): fit_f( net=_net, batch_size=batch_size, batch_data=batch_data, trainer=trainer, bp_loss_f=bp_loss_f, loss_function=loss_function, loss_monitor=loss_monitor, ctx=ctx, ) if _cfg.lr_params and "update_params" in _cfg.lr_params: _cfg.logger.info("reset trainer") lr_params = _cfg.lr_params.pop("update_params") lr_update_params = dict(batches_per_epoch=i + 1, lr=_cfg.optimizer_params["learning_rate"], update_epoch=lr_params.get( "update_epoch", _cfg.end_epoch - _cfg.begin_epoch - 1)) lr_update_params.update(lr_params) trainer = module.Module.get_trainer( _net, optimizer=_cfg.optimizer, optimizer_params=_cfg.optimizer_params, lr_params=lr_update_params, select=_cfg.train_select, logger=_cfg.logger) if epoch % 1 == 0: msg, data = evaluation_formatter(iteration=epoch, loss_name_value=dict( loss_monitor.items()), eval_name_value=eval_f(_net, test_data, ctx=ctx), extra_info=None, dump=dump_result, keep={"msg", "data"}) print(msg) if reporthook is not None: reporthook(data) if final_reporthook is not None: final_reporthook()
def numerical_check(_net, _cfg: Configuration, train_data, test_data, dump_result=False, reporthook=None, final_reporthook=None): # pragma: no cover ctx = _cfg.ctx _net = set_device(_net, ctx) bp_loss_f = get_bp_loss(ctx, **_cfg.loss_params) loss_function = {} loss_function.update(bp_loss_f) from longling.ML.toolkit import EpochEvalFMT as Formatter from longling.ML.toolkit import MovingLoss from tqdm import tqdm loss_monitor = MovingLoss(loss_function) progress_monitor = tqdm if dump_result: from longling import config_logging validation_logger = config_logging( filename=path_append(_cfg.model_dir, "result.log"), logger="%s-validation" % _cfg.model_name, mode="w", log_format="%(message)s", ) evaluation_formatter = Formatter( logger=validation_logger, dump_file=_cfg.validation_result_file, ) else: evaluation_formatter = Formatter() # train check from longling.ML.PytorchHelper.toolkit.optimizer import get_trainer trainer = get_trainer( _net, optimizer=_cfg.optimizer, optimizer_params=_cfg.optimizer_params, select=_cfg.train_select ) for epoch in range(_cfg.begin_epoch, _cfg.end_epoch): for batch_data in progress_monitor(train_data, "Epoch: %s" % epoch): fit_f( net=_net, batch_data=batch_data, trainer=trainer, bp_loss_f=bp_loss_f, loss_function=loss_function, loss_monitor=loss_monitor, ) if epoch % 1 == 0: msg, data = evaluation_formatter( epoch=epoch, loss_name_value=dict(loss_monitor.items()), eval_name_value=eval_f(_net, test_data, ctx=ctx), extra_info=None, dump=dump_result, ) print(msg) if reporthook is not None: reporthook(data) # optional, whether reset the loss at the end of each epoch loss_monitor.reset() if final_reporthook is not None: final_reporthook()