tnt.joint(model=ppnet_multi, log=log) joint_lr_scheduler.step() _ = tnt.train(model=ppnet_multi, dataloader=train_loader, optimizer=joint_optimizer, class_specific=class_specific, coefs=coefs, log=log) accu = tnt.test(model=ppnet_multi, dataloader=test_loader, class_specific=class_specific, log=log) save.save_model_w_condition(model=ppnet, model_dir=model_dir, model_name=str(epoch) + 'nopush', accu=accu, target_accu=0.70, log=log) if epoch >= push_start and epoch in push_epochs: push.push_prototypes( train_push_loader, # pytorch dataloader (must be unnormalized in [0,1]) prototype_network_parallel= ppnet_multi, # pytorch network with prototype_vectors class_specific=class_specific, preprocess_input_function= preprocess_input_function, # normalize if needed prototype_layer_stride=1, root_dir_for_saving_prototypes= img_dir, # if not None, prototypes will be saved here epoch_number=
prune_threshold=prune_threshold, preprocess_input_function=preprocess_input_function, # normalize original_model_dir=original_model_dir, epoch_number=epoch, #model_name=None, log=log, copy_prototype_imgs=True) accu = tnt.test(model=ppnet_multi, dataloader=test_loader, dataloader1=inst_loader, class_specific=class_specific, log=log) save.save_model_w_condition(model=ppnet, model_dir=model_dir, model_name=original_model_name.split('push')[0] + 'prune', accu=accu, target_accu=0.70, log=log) # last layer optimization if optimize_last_layer: last_layer_optimizer_specs = [{ 'params': ppnet.last_layer.parameters(), 'lr': 1e-4 }] last_layer_optimizer = torch.optim.Adam(last_layer_optimizer_specs) coefs = { 'crs_ent': 1, 'clst': 0.8,
prototype_original_img_filename_prefix, proto_bound_boxes_filename_prefix= proto_bound_boxes_filename_prefix, save_prototype_class_identity=True, log=log) acc, _ = tnt.valid(model=vgg_multi, dataloader=valid_loader, label2name=label2name, args=args, class_specific=class_specific, log=log) save.save_model_w_condition(model=vgg, model_dir=model_dir, model_name='best_model_protos_opt', accu=acc, target_accu=best_acc, log=log) is_best = acc > best_acc best_acc = max(acc, best_acc) if is_best: best_epoch = epoch tnt.last_layers(model=vgg_multi, log=log) _ = tnt.train(model=vgg_multi, dataloader=train_loader, label2name=label2name, optimizer=last_layers_optimizer, args=args, class_specific=class_specific,
prune_threshold=prune_threshold, preprocess_input_function=preprocess_input_function, # normalize original_model_dir=original_model_dir, epoch_number=epoch, # model_name=None, log=log, copy_prototype_imgs=True, ) accu = tnt.test(model=ppnet_multi, dataloader=test_loader, class_specific=class_specific, log=log) save.save_model_w_condition( model=ppnet, model_dir=model_dir, model_name=original_model_name.split("push")[0] + "prune", accu=accu, target_accu=0.70, log=log, ) # last layer optimization if optimize_last_layer: last_layer_optimizer_specs = [{ "params": ppnet.last_layer.parameters(), "lr": 1e-4 }] last_layer_optimizer = torch.optim.Adam(last_layer_optimizer_specs) coefs = { "crs_ent": 1, "clst": 0.8,