# print('logits: ', model(x).detach().numpy()) # print('adv logits: ', adv_logits.detach().numpy()) # if batch_id == 0: # break # exit(0) # # if hps.attack == 'pgdinf': # linfPGD_attack(model, hps) # elif hps.attack == 'pgd2': # l2PGD_attack(model, hps) # elif hps.attack == 'cw': # cw_l2_attack(model, hps) # elif hps.attack == 'fgsm': # fgsm_attack(model, hps) model.eval() fmodel = foolbox.models.PyTorchModel(model, bounds=(0, 1.), num_classes=10) dataset = get_dataset(data_name=hps.problem, train=False, label_id=0) # hps.n_batch_test = 1 test_loader = DataLoader(dataset=dataset, batch_size=hps.n_batch_test, shuffle=False) for batch_id, (x, y) in enumerate(test_loader): # Note that images are scaled to [0., 1.0] x, y = x.to(hps.device), y.to(hps.device) if hps.attack == 'deepfool': attack = foolbox.attacks.DeepFoolL2Attack(fmodel) elif hps.attack == 'cw': attack = foolbox.attacks.CarliniWagnerL2Attack(fmodel) elif hps.attack == 'boundary':
def inference(hps: DictConfig) -> None: # This enables a ctr-C without triggering errors import signal signal.signal(signal.SIGINT, lambda x, y: sys.exit(0)) logger = logging.getLogger(__name__) cuda_available = torch.cuda.is_available() torch.manual_seed(hps.seed) device = "cuda" if cuda_available and hps.device == 'cuda' else "cpu" # Models local_channel = hps.get(hps.base_classifier).last_conv_channel classifier = get_model(model_name=hps.base_classifier, in_size=local_channel, out_size=hps.rep_size).to(hps.device) logger.info('Base classifier name: {}, # parameters: {}'.format( hps.base_classifier, cal_parameters(classifier))) sdim = SDIM(disc_classifier=classifier, mi_units=hps.mi_units, n_classes=hps.n_classes, margin=hps.margin, rep_size=hps.rep_size, local_channel=local_channel).to(hps.device) model_path = 'SDIM_{}.pth'.format(hps.base_classifier) base_dir = '/userhome/cs/u3003679/generative-classification-with-rejection' path = os.path.join(base_dir, model_path) sdim.load_state_dict(torch.load(path)['model_state']) # logging the SDIM desc. for desc in sdim.desc(): logger.info(desc) eval_loader = Loader('eval', batch_size=hps.n_batch_test, device=device) if cuda_available and hps.n_gpu > 1: sdim = torch.nn.DataParallel(sdim, device_ids=list(range(hps.n_gpu))) torch.manual_seed(hps.seed) np.random.seed(hps.seed) n_iters = 0 top1 = AverageMeter('Acc@1') top5 = AverageMeter('Acc@5') sdim.eval() for x, y in eval_loader: n_iters += 1 if n_iters == len(eval_loader): break with torch.no_grad(): log_lik = sdim.infer(x) acc1, acc5 = accuracy(log_lik, y, topk=(1, 5)) top1.update(acc1, x.size(0)) top5.update(acc5, x.size(0)) logger.info('Test Acc@1: {:.3f}, Acc@5: {:.3f}'.format(top1.avg, top5.avg))