def eval_classification(model, sessinit, dataflow): pred_config = PredictConfig( model=model, session_init=sessinit, input_names=['input', 'label'], output_names=['wrong-top1','bn5/output:0','conv5/output:0'] ) acc1 = RatioCounter() pred = FeedfreePredictor(pred_config, StagingInput(QueueInput(dataflow), device='/gpu:0')) for _ in tqdm.trange(dataflow.size()): top1,afbn5,beforbn5= pred() dic ={} dic['bn5/output:0']=afbn5 dic['conv5/output:0']=beforbn5 batch_size = top1.shape[0] acc1.feed(top1.sum(), batch_size) dir = logger.get_logger_dir() fname = os.path.join( dir, 'afbn5-{}.npz'.format(int(time.time()))) np.savez(fname, **dic) print("Top1 Error: {}".format(acc1.ratio))
def pred_config(self, args, df, callbacks) -> TrainConfig: return TrainConfig( model=self.train_model(args), data=StagingInput(QueueInput(df)), callbacks=callbacks, max_epoch=args.epochs, steps_per_epoch=args.steps, session_init=SaverRestore(args.load) if args.load else None, )
def test(net, session_init, val_dataflow, do_calc_flops=False, extended_log=False): """ Main test routine. Parameters: ---------- net : obj Model. session_init : SessionInit Session initializer. do_calc_flops : bool, default False Whether to calculate count of weights. extended_log : bool, default False Whether to log more precise accuracy values. """ pred_config = PredictConfig( model=net, session_init=session_init, input_names=["input", "label"], output_names=["wrong-top1", "wrong-top5"] ) err_top1 = RatioCounter() err_top5 = RatioCounter() tic = time.time() pred = FeedfreePredictor(pred_config, StagingInput(QueueInput(val_dataflow), device="/gpu:0")) for _ in tqdm.trange(val_dataflow.size()): err_top1_val, err_top5_val = pred() batch_size = err_top1_val.shape[0] err_top1.feed(err_top1_val.sum(), batch_size) err_top5.feed(err_top5_val.sum(), batch_size) err_top1_val = err_top1.ratio err_top5_val = err_top5.ratio if extended_log: logging.info("Test: err-top1={top1:.4f} ({top1})\terr-top5={top5:.4f} ({top5})".format( top1=err_top1_val, top5=err_top5_val)) else: logging.info("Test: err-top1={top1:.4f}\terr-top5={top5:.4f}".format( top1=err_top1_val, top5=err_top5_val)) logging.info("Time cost: {:.4f} sec".format( time.time() - tic)) if do_calc_flops: calc_flops(model=net)
def eval_on_ILSVRC12(model, sessinit, dataflow): pred_config = PredictConfig(model=model, session_init=sessinit, input_names=['input', 'label'], output_names=['wrong-top1', 'wrong-top5']) acc1, acc5 = RatioCounter(), RatioCounter() # This does not have a visible improvement over naive predictor, # but will have an improvement if image_dtype is set to float32. pred = FeedfreePredictor( pred_config, StagingInput(QueueInput(dataflow), device='/gpu:0')) for _ in tqdm.trange(dataflow.size()): top1, top5 = pred() batch_size = top1.shape[0] acc1.feed(top1.sum(), batch_size) acc5.feed(top5.sum(), batch_size) print("Top1 Error: {}".format(acc1.ratio)) print("Top5 Error: {}".format(acc5.ratio))
def test(net, session_init, val_dataflow, do_calc_flops=False, extended_log=False): pred_config = PredictConfig( model=net, session_init=session_init, input_names=['input', 'label'], output_names=['wrong-top1', 'wrong-top5'] ) err_top1 = RatioCounter() err_top5 = RatioCounter() tic = time.time() pred = FeedfreePredictor(pred_config, StagingInput(QueueInput(val_dataflow), device='/gpu:0')) # import tensorflow as tf # summ_writer = tf.summary.FileWriter("/home/semery/projects/imgclsmob_data/gl-squeezenet_v1_1/", pred._sess.graph) for _ in tqdm.trange(val_dataflow.size()): err_top1_val, err_top5_val = pred() batch_size = err_top1_val.shape[0] err_top1.feed(err_top1_val.sum(), batch_size) err_top5.feed(err_top5_val.sum(), batch_size) # print("err_top1_val={}".format(err_top1_val.sum() / batch_size)) # print("err_top5_val={}".format(err_top5_val.sum() / batch_size)) err_top1_val = err_top1.ratio err_top5_val = err_top5.ratio if extended_log: logging.info('Test: err-top1={top1:.4f} ({top1})\terr-top5={top5:.4f} ({top5})'.format( top1=err_top1_val, top5=err_top5_val)) else: logging.info('Test: err-top1={top1:.4f}\terr-top5={top5:.4f}'.format( top1=err_top1_val, top5=err_top5_val)) logging.info('Time cost: {:.4f} sec'.format( time.time() - tic)) if do_calc_flops: calc_flops(model=net)
def test(net, session_init, val_dataflow, do_calc_flops=False, extended_log=False): pred_config = PredictConfig( model=net, session_init=session_init, input_names=["input", "label"], output_names=["wrong-top1", "wrong-top5"] ) err_top1 = RatioCounter() err_top5 = RatioCounter() tic = time.time() pred = FeedfreePredictor(pred_config, StagingInput(QueueInput(val_dataflow), device="/gpu:0")) for _ in tqdm.trange(val_dataflow.size()): err_top1_val, err_top5_val = pred() batch_size = err_top1_val.shape[0] err_top1.feed(err_top1_val.sum(), batch_size) err_top5.feed(err_top5_val.sum(), batch_size) err_top1_val = err_top1.ratio err_top5_val = err_top5.ratio if extended_log: logging.info("Test: err-top1={top1:.4f} ({top1})\terr-top5={top5:.4f} ({top5})".format( top1=err_top1_val, top5=err_top5_val)) else: logging.info("Test: err-top1={top1:.4f}\terr-top5={top5:.4f}".format( top1=err_top1_val, top5=err_top5_val)) logging.info("Time cost: {:.4f} sec".format( time.time() - tic)) if do_calc_flops: calc_flops(model=net)
def eval_classification(model, sessinit, dataflow): """ Eval a classification model on the dataset. It assumes the model inputs are named "input" and "label", and contains "wrong-top1" and "wrong-top5" in the graph. """ pred_config = PredictConfig(model=model, session_init=sessinit, input_names=['input', 'label'], output_names=['wrong-top1', 'wrong-top5']) acc1, acc5 = RatioCounter(), RatioCounter() # This does not have a visible improvement over naive predictor, # but will have an improvement if image_dtype is set to float32. pred = FeedfreePredictor( pred_config, StagingInput(QueueInput(dataflow), device='/gpu:0')) for _ in tqdm.trange(dataflow.size()): top1, top5 = pred() batch_size = top1.shape[0] acc1.feed(top1.sum(), batch_size) acc5.feed(top5.sum(), batch_size) print("Top1 Error: {}".format(acc1.ratio)) print("Top5 Error: {}".format(acc5.ratio))