如何基于多类(softmax激活函数)深度学习模型问题为KernelExplainer重塑数据

时间:2020-08-26 12:05:06

标签: python tensorflow keras reshape shap

我的模型是多类LSTM。 我想知道如何使用Shap来帮助解释我的模型。

我发现使用Shap困难,因为我的数据是3维的,并且使用softmax输出是多类的。

(我使用tensorflow 1.15,keras 2.2.4)

Model:

L1units=75

L2units=100

L3units=100

L4units=32

#Model DESIGN

model = Sequential()

model.add(Dense(L1units,activation='relu',input_shape=(1,29)))

model.add(LSTM(L2units, activation='relu',return_sequences=True))

model.add(LSTM(L3units, activation='relu'))

model.add(Masking(mask_value=0))

model.add(Dropout(0.2))

model.add(Dense(L4units, activation='softmax'))

opt = tensorflow.keras.optimizers.Adam(learning_rate=0.0001) 

model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
 

X_train.shape (193804 ,1,29) Y_train.shape (193804,32)

X_test.shape ( 48464 1,29)  Y_test.shape (48464, 32)

我尝试了DeepExplainer,因为DeepExplainer可以处理3d数据,但是我没有成功。

出现错误消息-LookupError:渐变注册表没有以下条目:shap_TensorListStack

import shap

explainer=shap.DeepExplainer(model,X_train[:100])
shap_values = explainer.shap_values(X_test[:10])

我知道KernelExplainer可以应用于任何模型,但是所需的输入形状必须是二维的(#samples x #features)。基于此stackoverflow Shap LSTM (Keras, TensorFlow) ValueError: shape mismatch: objects cannot be broadcast to a single shape

我应该如何重塑/展平X_train,X_test以便能够使用KernelExplainer?

还是我可以根据错误以某种方式修复DeepExplainer?

0 个答案:

没有答案