Пример #1
0
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
Пример #2
0
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)