'RandomForestClassifier'对象没有属性'layers'

时间:2018-10-31 05:41:59

标签: python keras cleverhans

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

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攻击?有没有一种方法可以将randomforestclassifier添加到顺序模型以具有图层?还是有另一种攻击方式?

1 个答案:

答案 0 :(得分:1)

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

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