1

我正在尝试攻击我的随机森林分类器。

clf = RandomForestClassifier(max_features="sqrt", n_estimators=500, n_jobs=-1, verbose=1, warm_start=True)
clf.fit(X_train, y_train)

在这个定义之后,我做了我的预测,然后我做了下面的代码:

from keras import backend
from cleverhans.utils_keras import KerasModelWrapper
from cleverhans.attacks import FastGradientMethod
sess =  backend.get_session()

wrap = KerasModelWrapper(clf)
fgsm = FastGradientMethod(wrap, sess=sess)
fgsm_params = {'eps': 0.15,
               'clip_min': 0.,
               'clip_max': 1.}

adv_x = fgsm.generate_np(X_test, **fgsm_params) 
adv_x.shape

在 --> 10 adv_x = fgsm.generate_np(X_test, **fgsm_params)我得到一个属性错误。

AttributeError:“RandomForestClassifier”对象没有属性“图层”

我的意思是,我的分类器没有层,但我怎么能做这个 fgsm 攻击呢?有没有办法将随机森林分类器添加到顺序模型以具有层?还是有其他攻击方式?

4

1 回答 1

1

您将无法在 sklearn 模型上运行 FGSM 攻击,因为 CleverHans 无法计算找到扰动输入以找到对抗样本的方向所需的梯度。要计算这些梯度,需要对模型进行符号定义,这需要使用 TensorFlow 定义模型(直接或通过 Keras 等高级抽象)。

但是,如果您想使用 sklearn 模型,则可以将其包装为 CleverHans 模型并仅使用 无梯度攻击,例如 SPSA。

于 2018-11-26T06:18:01.347 回答