def ding_test(cfg:BaseConfigByEpoch, net=None, val_dataloader=None, show_variables=False, convbuilder=None, init_hdf5=None, extra_msg=None, weights_dict=None): with Engine(local_rank=0, for_val_only=True) as engine: engine.setup_log( name='test', log_dir='./', file_name=DETAIL_LOG_FILE) if convbuilder is None: convbuilder = ConvBuilder(base_config=cfg) if net is None: net_fn = get_model_fn(cfg.dataset_name, cfg.network_type) model = net_fn(cfg, convbuilder).cuda() else: model = net.cuda() if val_dataloader is None: val_data = create_dataset(cfg.dataset_name, cfg.dataset_subset, global_batch_size=cfg.global_batch_size, distributed=False) num_examples = num_val_examples(cfg.dataset_name) assert num_examples % cfg.global_batch_size == 0 val_iters = num_val_examples(cfg.dataset_name) // cfg.global_batch_size print('batchsize={}, {} iters'.format(cfg.global_batch_size, val_iters)) criterion = get_criterion(cfg).cuda() engine.register_state( scheduler=None, model=model, optimizer=None) if show_variables: engine.show_variables() assert not engine.distributed if weights_dict is not None: engine.load_from_weights_dict(weights_dict) else: if cfg.init_weights: engine.load_checkpoint(cfg.init_weights) if init_hdf5: engine.load_hdf5(init_hdf5) # engine.save_by_order('smi2_by_order.hdf5') # engine.load_by_order('smi2_by_order.hdf5') # engine.save_hdf5('model_files/stami2_lrs4Z.hdf5') model.eval() eval_dict, total_net_time = run_eval(val_data, val_iters, model, criterion, 'TEST', dataset_name=cfg.dataset_name) val_top1_value = eval_dict['top1'].item() val_top5_value = eval_dict['top5'].item() val_loss_value = eval_dict['loss'].item() msg = '{},{},{},top1={:.5f},top5={:.5f},loss={:.7f},total_net_time={}'.format(cfg.network_type, init_hdf5 or cfg.init_weights, cfg.dataset_subset, val_top1_value, val_top5_value, val_loss_value, total_net_time) if extra_msg is not None: msg += ', ' + extra_msg log_important(msg, OVERALL_LOG_FILE) return eval_dict
def val_during_train(epoch, iteration, tb_tags, engine, model, val_data, criterion, descrip_str, dataset_name, test_batch_size, tb_writer): model.eval() num_examples = num_val_examples(dataset_name) assert num_examples % test_batch_size == 0 val_iters = num_examples // test_batch_size eval_dict, total_net_time = run_eval(val_data, val_iters, model, criterion, descrip_str, dataset_name=dataset_name) val_top1_value = eval_dict['top1'].item() val_top5_value = eval_dict['top5'].item() val_loss_value = eval_dict['loss'].item() for tag, value in zip(tb_tags, [val_top1_value, val_top5_value, val_loss_value]): tb_writer.add_scalars(tag, {'Val': value}, iteration) engine.log( 'val at epoch {}, top1={:.5f}, top5={:.5f}, loss={:.6f}'.format(epoch, val_top1_value, val_top5_value, val_loss_value)) model.train()