'RandomForestClassifier' 对象没有属性 'layers'
'RandomForestClassifier' object has no attribute 'layers'
我正在尝试攻击我的随机森林分类器。
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' object has no attribute
'layers'
我的意思是,我的分类器没有层,但我该如何进行这种 fgsm 攻击?有没有办法将 randomforestclassifier 添加到顺序模型以具有层?还是有别的攻击方式?
您将无法 运行 FGSM 攻击 sklearn 模型,因为 CleverHans 无法计算找到扰动输入的方向所需的梯度以找到对抗性示例。要计算这些梯度,需要模型的符号定义,这需要使用 TensorFlow 定义模型(直接或通过像 Keras 这样的高级抽象)。
如果您想使用 sklearn 模型,您可以将其包装为 CleverHans 模型并使用 only gradient-free 攻击,例如 SPSA。
我正在尝试攻击我的随机森林分类器。
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' object has no attribute 'layers'
我的意思是,我的分类器没有层,但我该如何进行这种 fgsm 攻击?有没有办法将 randomforestclassifier 添加到顺序模型以具有层?还是有别的攻击方式?
您将无法 运行 FGSM 攻击 sklearn 模型,因为 CleverHans 无法计算找到扰动输入的方向所需的梯度以找到对抗性示例。要计算这些梯度,需要模型的符号定义,这需要使用 TensorFlow 定义模型(直接或通过像 Keras 这样的高级抽象)。
如果您想使用 sklearn 模型,您可以将其包装为 CleverHans 模型并使用 only gradient-free 攻击,例如 SPSA。