9.2.2 在advbox中使用fgsm算法
    下面我们以mnist为例介绍如何在advbox中使用fgsm算法,代码路径为:
    https://github.com/duoergun0729/adversarial_examples/blob/master/code/ 9-advbox-mnist-fgsm.ipynb
    首先运行mnist_model_pytorch.py生成识别mnist的cnn/mlp模型。
    cd advbox/tutorials
    python mnist_model_pytorch.py
    经过10轮训练,在测试集上的准确率达到了99.00%。
    epoch=10 accuracy=99.00%
    然后加载需要使用的python库,使用的深度学习框架为pytorch。advbox中对各种深度学习框架的封装在advbox.models中,对攻击算法的封装在advbox.attacks中。通过sys.path.append把advbox的源码添加到python的系统路径中。
    import sys
    #添加系统路径
    sys.path.append("../advbox/")
    import torch
    import torchvision
    from torchvision import datasets, transforms
    from torch.autograd import variable
    import torch.utils.data.dataloader as data
    from advbox.adversary import adversary
    from advbox.attacks.gradient_method import fgsm
    from advbox.models.pytorch import pytorchmodel
    from tutorials.mnist_model_pytorch import net
    定义全局变量,分别为测试集的大小以及预训练的pytorch模型的路径。
    total_num = 10000
    pretrained_model="../advbox/tutorials/mnist-pytorch/net.pth"
    获取测试数据集,在pytorch中默认完成了mnist归一化。
    #使用mnist测试数据集,随机挑选total_num个测试数据
    test_loader = torch.utils.data.dataloader(
    datasets.mnist('../advbox/tutorials/mnist-pytorch/data', train=false,
    download=true, transform=transforms.compose([
    transforms.totensor(),
    ])),
    batch_size=1, shuffle=true)
    获取当前的计算设备,当gpu可用时返回gpu,反之返回cpu。加载预训练模型,并把模型设置为预测模式,因为dropout和bn层在预测模式和训练模式时功能不一样,需要手工设置为预测模式。
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    # 网络初始化
    model = net().to(device)
    # 加载预训练模型
    model.load_state_dict(torch.load(pretrained_model, map_location='cpu'))
    # 针对dropout层,设置为预测模式
    model.eval()
    实例化advbox对象,在本例中选择pytorchmodel即可。实例化fgsm对象,并设置攻击参数。其中channel_axis指的是通道字段在图像数据中的位置,pytorch中mnist数据的形状为[none,1,28,28],损失函数loss_func使用常见的交叉熵函数。
    loss_func = torch.nn.crossentropyloss()
    # advbox示例
    m = pytorchmodel(
    model, loss_func,(0, 1),
    channel_axis=1)
    #实例化fgsm
    attack = fgsm(m)
    #设置攻击步长为0.1
    attack_config = {"epsilons": 0.1}
    遍历测试数据集,进行无定向fgsm攻击。
    # 使用测试数据生成对抗样本
    total_count = 0
    fooling_count = 0
    for i, data in enumerate(test_loader):
    inputs, labels = data
    inputs, labels=inputs.numpy(),labels.numpy()
    total_count += 1
    adversary = adversary(inputs, labels[0])
    # fgsm non-targeted attack
    adversary = attack(adversary, **attack_config)
    经过10 000次攻击,攻击成功个数为10 000,攻击成功率为100%。
    attack success, original_label=9, adversarial_label=4, count=10000
    [test_dataset]: fooling_count=10000, total_count=10000, fooling_rate=1.000000
    fgsm attack done

章节目录

智能系统与技术丛书·AI安全之对抗样本入门所有内容均来自互联网,一曲书屋只为原作者兜哥的小说进行宣传。欢迎各位书友支持兜哥并收藏智能系统与技术丛书·AI安全之对抗样本入门最新章节