ART版本:1.14.0
项目github:adversarial-robustness-toolbox
在使用ART包进行ZOO黑盒攻击时,使用BlackBoxClassifier封装黑盒模型,实现代码如下:
# 定义黑盒分类器
def black_box_predict(x):
# 这里需要将你的模型的预测输出替换为黑盒预测函数
# 该函数接受一个输入张量并返回一个输出张量
# 示例函数仅返回随机噪声
return demo.model(x)
classifier = BlackBoxClassifier(predict_fn=model_func, input_shape=input_shape, nb_classes=class_num, clip_values=(0, 255))
attack = ZooAttack(classifier=classifier, max_iter=max_iter, learning_rate=learning_rate, initial_const=initial_const)
# 生成对抗样本
x_test_adv = attack.generate(x=x_test)
上述代码运行报错:
AttributeError: 'BlackBoxClassifier' object has no attribute 'channels_first'
使用BlackBoxClassifierNeuralNetwork类代替BlackBoxClassifier类
classifier = BlackBoxClassifierNeuralNetwork(predict_fn=model_func, input_shape=input_shape, nb_classes=class_num, clip_values=(0, 255), channels_first=False)
attack = ZooAttack(classifier=classifier, max_iter=max_iter, learning_rate=learning_rate, initial_const=initial_const)
x_test_adv = attack.generate(x=x_test)
这里特别注意,在使用BlackBoxClassifierNeuralNetwork类封装黑盒模型时,注意输入张量是否为channel_first,并配置好属性
Art库中ZooAttack算法的参数调整可以对攻击效果产生很大的影响,以下是一些常用的参数及其调整方法: