Объяснение SHAP для входов с различными типами в моделях CNN - PullRequest
0 голосов
/ 16 января 2020

У меня есть вопрос, чтобы использовать SHAP, чтобы объяснить результат моей модели CNN. Мои модели CNN принимают 2 входа с разными типами. Один - это изображение, а другой - векторный элемент. Я тренировался и тестировал модель, принимая во внимание их обоих. Нет проблем с созданием модели.

Когда я пытался использовать SHAP для объяснения результата для этих двух входов одновременно, он не работал. Я на самом деле пробовал как deepexplainer и GradienTexplainer. Я получил следующую ошибку:

Файл "", строка 1, в shap_values ​​= объяснение.shap_values ​​([x_test [: 3], feature_test [: 3]])

Файл "C: \ Users \ kaz10003 \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site->> packages \ shap \ объяснители \ deep_init_.py", строка 119, в shap_values ​​возвращает self.explainer.shap_values ​​(X, ranked_outputs, output_rank_order)

Файл "C: \ Users \ kaz10003 \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-> packages \ shap \ объяснители \ deep \ deep_tf.py", строка 284, в shap_values ​​diffs = model_output [:, l] - self.expected_value [l] -> output_phis [l] .sum (axis = кортеж (range (1, output_phis [l] .ndim)))

AttributeError : у объекта 'list' нет атрибута 'sum'

Кто-нибудь может знать, поддерживает ли SHAP такую ​​реализацию? Вот мой код:

n_features = 10
input_feat = Input((n_features,))
input_tensor = Input(shape=(50,60, 1))

c3 = Conv2D(32, (3, 3), activation='relu', padding='same') (input_tensor)
c3 = Conv2D(32, (3, 3), activation='relu', padding='same') (c3)
c3 = Conv2D(32, (3, 3), activation='relu', padding='same') (c3)
p3 = MaxPooling2D((2, 2)) (c3)

f_repeat = RepeatVector(6*7)(input_feat)
f_conv = Reshape((6, 7, n_features))(f_repeat)
p3_feat = concatenate([p3, f_conv], -1)

c3 = Flatten()(p3_feat)
c3 = Dense(512)(c3)
outputs = Dense(2, activation='softmax')(c3)
model = Model(inputs=[input_tensor, input_feat], outputs=[outputs])

model.summary()

explainer = shap.GradientExplainer(model, [x_train, feature_train])
shap_values = explainer.shap_values([x_test[:3], feature_test[:3]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...