Объект 'RandomForestClassifier' не имеет атрибута 'layer'

Я пытаюсь атаковать мой случайный лесной классификатор.

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' нет атрибута 'layer'

Я имею в виду, что у моего классификатора нет слоев, но как я могу сделать эту атаку fgsm? Есть ли способ добавить randomforestclassifier в последовательную модель, чтобы иметь слои? Или есть другой способ атаковать?

1 ответ

Решение

Вы не сможете запустить FGSM-атаку на модели склеарна, потому что CleverHans не сможет вычислить градиенты, необходимые для определения направления, в котором нужно возмущать входные данные, чтобы найти состязательный пример. Чтобы вычислить эти градиенты, необходимо символическое определение модели, которое требует, чтобы модель была определена с использованием TensorFlow (напрямую или через абстракцию высокого уровня, такую ​​как Keras).

Если вы хотите использовать модель sklearn, вы можете использовать ее как модель CleverHans и использовать только атакибез градиента, такие как SPSA.

Другие вопросы по тегам