pytorch实现黑盒攻击

源码链接:https://github.com/wanglouis49/pytorch-adversarial_box
在LeNet5上进行黑盒攻击
FGSM生成对抗样本

substituteModel上训练

def MNIST_bbox_sub(param, loader_hold_out, loader_test):

    # Setup training
    optimizer = torch.optim.Adam(net.parameters(), lr=param['learning_rate'])

    # Data held out for initial training
	# .....

    # 训练
    for rho in range(param['data_aug']):
        print("Substitute training epoch #"+str(rho))
        print("Training data: "+str(len(X_sub)))

        rng = np.random.RandomState()

        # model training
        for epoch in range(param['nb_epochs']):

            print('Starting epoch %d / %d' % (epoch + 1, param['nb_epochs']))

            # Compute number of batches
            nb_batches = int(np.ceil(float(len(X_sub)) / 
                param['test_batch_size']))
            assert nb_batches * param['test_batch_size'] >= len(X_sub)

            # Indices to shuffle training set
            index_shuf = list(range(len(X_sub)))
            rng.shuffle(index_shuf)

            for batch in range(nb_batches):
			# ......

                scores = net(to_var(torch.from_numpy(x)))
                loss = nn.CrossEntropyLoss(scores, to_var(torch.from_numpy(y).long()))

                optimizer.zero_grad()
                loss.backward()
                optimizer.step()

            print('loss = %.8f' % (loss.item()))
        test(net, loader_test, blackbox=True, hold_out_size=param['hold_out_size'])

        # 如果不是最后一次,就增强数据集
        if rho < param['data_aug'] - 1:
            print("Augmenting substitute training data.")
            # Jacobian数据增强,包含了FGSM生成对抗样本
            X_sub = jacobian_augmentation(net, X_sub, y_sub)

            print("Labeling substitute training data.")
            # 使用目标模型进行预测
            scores = oracle(to_var(torch.from_numpy(X_sub)))
            y_sub = np.argmax(scores.data.cpu().numpy(), axis=1)
            print('x.size %d' % len(X_sub))

    torch.save(net.state_dict(), param['oracle_name']+'_sub.pkl')

黑盒攻击

adversary = FGSMAttack(net, param['epsilon']) # 梯度是从替代模型中的

print('For the substitute model:')
test(net, loader_test, blackbox=True, hold_out_size=param['hold_out_size'])

# Setup oracle
print('For the oracle'+param['oracle_name'])
print('agaist blackbox FGSM attacks using gradients from the substitute:')
attack_over_test_data(net, adversary, param, loader_test, oracle) # 对目标模型进行黑盒攻击
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

o_o O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值