def train_models(models_path, device='cpu'): tasks = ['cifar10', 'cifar100', 'tinyimagenet'] cnns = [] sdns = [] for task in tasks: af.extend_lists(cnns, sdns, arcs.create_vgg16bn(models_path, task, save_type='cd')) af.extend_lists( cnns, sdns, arcs.create_resnet56(models_path, task, save_type='cd')) af.extend_lists( cnns, sdns, arcs.create_wideresnet32_4(models_path, task, save_type='cd')) af.extend_lists( cnns, sdns, arcs.create_mobilenet(models_path, task, save_type='cd')) train(models_path, cnns, sdn=False, device=device) train_sdns(models_path, sdns, ic_only=True, device=device) # train SDNs with IC-only strategy train_sdns(models_path, sdns, ic_only=False, device=device) # train SDNs with SDN-training strategy
def sdn_ic_only_backdoored(device): params = arcs.create_vgg16bn(None, 'cifar10', None, True) path = 'backdoored_models' backdoored_cnn_name = 'VGG16_cifar10_backdoored' save_sdn_name = 'VGG16_cifar10_backdoored_SDN' # Use the class VGG backdoored_cnn = VGG(params) backdoored_cnn.load_state_dict(torch.load('{}/{}'.format( path, backdoored_cnn_name), map_location='cpu'), strict=False) # convert backdoored cnn into a sdn backdoored_sdn, sdn_params = af.cnn_to_sdn( None, backdoored_cnn, params, preloaded=backdoored_cnn) # load the CNN and convert it to a sdn arcs.save_model(backdoored_sdn, sdn_params, path, save_sdn_name, epoch=0) # save the resulting sdn networks = [save_sdn_name] train(path, networks, sdn=True, ic_only_sdn=True, device=device)