def sdn_test_early_exits(model, loader, device='cpu'): model.eval() early_output_counts = [0] * model.num_output non_conf_output_counts = [0] * model.num_output top1 = data.AverageMeter() top5 = data.AverageMeter() total_time = 0 with torch.no_grad(): for batch in loader: b_x = batch[0].to(device) b_y = batch[1].to(device) start_time = time.time() output, output_id, is_early = model(b_x) end_time = time.time() total_time+= (end_time - start_time) if is_early: early_output_counts[output_id] += 1 else: non_conf_output_counts[output_id] += 1 prec1, prec5 = data.accuracy(output, b_y, topk=(1, 5)) top1.update(prec1[0], b_x.size(0)) top5.update(prec5[0], b_x.size(0)) top1_acc = top1.avg.data.cpu().numpy()[()] top5_acc = top5.avg.data.cpu().numpy()[()] return top1_acc, top5_acc, early_output_counts, non_conf_output_counts, total_time
def sdn_test(model, loader, device='cpu'): model.eval() top1 = [] top5 = [] for output_id in range(model.num_output): t1 = data.AverageMeter() t5 = data.AverageMeter() top1.append(t1) top5.append(t5) with torch.no_grad(): for batch in loader: b_x = batch[0].to(device) b_y = batch[1].to(device) output = model(b_x) for output_id in range(model.num_output): cur_output = output[output_id] prec1, prec5 = data.accuracy(cur_output, b_y, topk=(1, 5)) top1[output_id].update(prec1[0], b_x.size(0)) top5[output_id].update(prec5[0], b_x.size(0)) top1_accs = [] top5_accs = [] for output_id in range(model.num_output): top1_accs.append(top1[output_id].avg.data.cpu().numpy()[()]) top5_accs.append(top5[output_id].avg.data.cpu().numpy()[()]) return top1_accs, top5_accs
def cnn_test(model, loader, device='cpu'): model.eval() top1 = data.AverageMeter() top5 = data.AverageMeter() with torch.no_grad(): for batch in loader: b_x = batch[0].to(device) b_y = batch[1].to(device) output = model(b_x) prec1, prec5 = data.accuracy(output, b_y, topk=(1, 5)) top1.update(prec1[0], b_x.size(0)) top5.update(prec5[0], b_x.size(0)) top1_acc = top1.avg.data.cpu().numpy()[()] top5_acc = top5.avg.data.cpu().numpy()[()] return top1_acc, top5_acc
def cnn_test_time(model, loader, device='cpu'): model.eval() top1 = data.AverageMeter() top3 = data.AverageMeter() total_time = 0 with torch.no_grad(): for batch in loader: b_x = batch[0].to(device) b_y = batch[1].to(device) start_time = time.time() output = model(b_x) end_time = time.time() total_time += (end_time - start_time) prec1, prec3 = data.accuracy(output, b_y, topk=(1, 3)) top1.update(prec1[0], b_x.size(0)) top3.update(prec3[0], b_x.size(0)) top1_acc = top1.avg.data.cpu().numpy()[()] top3_acc = top3.avg.data.cpu().numpy()[()] return top1_acc, top3_acc, total_time
def cnn_test(model, loader, device='cpu'): model.eval() top1 = data.AverageMeter() top3 = data.AverageMeter() with torch.no_grad(): for batch in loader: b_x = batch[0].to(device) b_y = batch[1].to(device) output = model(b_x) if isinstance(output, list): output = output[0] prec1, prec3 = data.accuracy(output, b_y, topk=(1, 3)) top1.update(prec1[0], b_x.size(0)) top3.update(prec3[0], b_x.size(0)) top1_acc = top1.avg.data.cpu().numpy()[()] top3_acc = top3.avg.data.cpu().numpy()[()] return top1_acc, top3_acc