python - Shap DeepExplainer TypeError
问题描述
我第一次尝试在我正在开发的 LSTM 模型上实现 DeepExplainer()。我引用了“用于 IMDB 情绪分类的 Keras LSTM”示例,但我不完全确定我哪里出错了,我相信这是我输入的格式。
我的 LSTM 结构
inputs = keras.Input(shape=(None,), dtype="int32")
x = layers.Embedding(vocab_size, 128)(inputs)
x = layers.Bidirectional(layers.LSTM(64, return_sequences=True))(x)
x = layers.Bidirectional(layers.LSTM(64))(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.summary()
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
history = model.fit(X_train, y_train, batch_size=32, epochs=number_epochs, validation_data=(X_test, y_test))
保存我的模型
model.save("models/LSTM_",number_epochs, save_format="h5")
训练/测试数据
- 我正在使用 train_test_split 拆分处理后的数据集。
- X_train 和 X_test 数据使用 Tokenizer() 进行标记并转换为序列。
- y_train 和 y_test 数据使用 LabelBinarizer() 编码
形状解释器功能
def shap_explainer(X_train_not_encoded, X_test_not_encoded, X_train_encoded, X_test_encoded, model, word_index):
x_train_100 = X_train_encoded[:100]
session = backend.get_session()
explainer = shap.DeepExplainer(model, x_train_100, session)
num_explanation = 10
shap_values = explainer.shap_values(X_test_encoded[:num_explanation])
num2word = {}
for w in word_index.keys():
num2word[word_index[w]] = w
x_test_words = np.stack([np.array(list(map(lambda x: num2word.get(x, "NONE"), X_test_encoded[i]))) for i in range(10)])
shap.summary_plot(shap_values, feature_names = list(num2word.values()))
shap.initjs()
shap.force_plot(explainer.expected_value[0], shap_values[0][0], x_test_words[0])
错误信息
Traceback (most recent call last):
File "c:/.../Documents/Visual Studio Code Workspace/xai_classification_mixed_data/code/text_classification_model.py", line 197, in <module>
shap_explainer(X_train_cpy, X_test_cpy, X_train, X_test, model, word_index)
File "c:/.../Documents/Visual Studio Code Workspace/xai_classification_mixed_data/code/text_classification_model.py", line 178, in shap_explainer
shap_values = explainer.shap_values(X_test_encoded[:num_explanation])
File "C:\...\Anaconda3\envs\tf-gpu\lib\site-packages\shap\explainers\_deep\__init__.py", line 124, in shap_values
return self.explainer.shap_values(X, ranked_outputs, output_rank_order, check_additivity=check_additivity)
File "C:\...\Anaconda3\envs\tf-gpu\lib\site-packages\shap\explainers\_deep\deep_tf.py", line 308, in shap_values
sample_phis = self.run(self.phi_symbolic(feature_ind), self.model_inputs, joint_input)
File "C:\...\Anaconda3\envs\tf-gpu\lib\site-packages\shap\explainers\_deep\deep_tf.py", line 365, in run
return self.execute_with_overridden_gradients(anon)
File "C:\...\Anaconda3\envs\tf-gpu\lib\site-packages\shap\explainers\_deep\deep_tf.py", line 401, in execute_with_overridden_gradients
out = f()
File "C:\...\Anaconda3\envs\tf-gpu\lib\site-packages\shap\explainers\_deep\deep_tf.py", line 358, in anon
data = X[i].reshape(shape)
TypeError: 'NoneType' object cannot be interpreted as an integer
任何帮助将非常感激!谢谢
解决方案
推荐阅读
- ruby-on-rails - 在开发过程中暂时禁用引导程序?
- javascript - 按星期几更改课程
- javascript - IE10 的 Javascript 数据集
- java - 在 JXPath 对象层次结构中处理 Java Optional?
- dialogflow-es - DialogFlow 和 Google Cloud 自然语言产品之间的区别
- django - 在原子块内调用的“select_for_update”仍然是 TransactionManagementError
- javascript - firebase SDK 错误 - 找不到变量管理员
- jquery - Google 放置 API 错误:Edge 和 Firefox 未定义“google”
- sql - SQL - 比较不同表中的行
- php - 当月有 28,29 天时,将月份添加到日期