You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SHAP解释多模态(图像+表格)深度学习模型并解决报错

解决多模态模型SHAP解释的AttributeError及替代方案

一、修复当前报错

你遇到的AttributeError: 'list' object has no attribute 'shape'是因为SHAP处理多输入时,不能直接用列表传递数据和masker,且通用shap.Explainer对多模态输入的适配性较差。以下是修正后的代码(针对Keras/TensorFlow多输入模型):

import shap

# 加载模型
model_obj = load_model(model_path)

# 1. 准备背景数据集(建议用少量代表性样本,减少计算量)
background_images = images[:100]  # 取前100张图像作为背景
background_tabular = numerical_features[:100]  # 对应表格数据

# 2. 初始化各模态的masker
# 图像模态:用模糊masker,替代原代码的"data"(模糊策略更稳定)
image_masker = shap.maskers.Image("blur(128,128)", shape=images.shape[1:])
# 表格模态:用Partition masker,适合结构化数据
tabular_masker = shap.maskers.Partition(background_tabular, max_samples=100)

# 3. 组合masker,对应多输入的顺序
combined_masker = shap.maskers.Composite([image_masker, tabular_masker])

# 4. 使用DeepExplainer(专门适配深度学习模型),输入用元组传递
explainer = shap.DeepExplainer(
    model_obj,
    data=(background_images, background_tabular),
    masker=combined_masker
)

# 5. 计算SHAP值(先测试少量样本,避免计算过载)
test_images = images[:10]
test_tabular = numerical_features[:10]
shap_values = explainer.shap_values((test_images, test_tabular))

# 6. 分别可视化不同模态的解释
# 图像模态:展示SHAP热力图
shap.image_plot(shap_values[0], test_images)

# 表格模态:展示特征重要性
shap.summary_plot(shap_values[1], test_tabular)

关键修正点:

  • 用元组传递多输入数据(而非列表),SHAP内部会正确识别每个输入的shape属性。
  • 改用shap.DeepExplainer而非通用shap.Explainer,它对多输入深度学习模型的支持更完善。
  • 用shap.maskers.Composite组合不同模态的masker,确保每个输入对应正确的遮挡策略。

二、SHAP对多模态模型的支持说明

SHAP确实支持多模态输入,但需要遵循适配规则:

  • 对于Keras/TensorFlow多输入模型,必须用元组传递输入数据(背景、待解释样本)。
  • 不同模态需搭配对应masker:图像用shap.maskers.Image,表格用shap.maskers.Partition或shap.maskers.Independent。
  • 避免直接使用shap.Explainer(通用解释器),它更适合单输入模型,多输入场景优先用DeepExplainer或KernelExplainer。

三、其他可解释多模态模型的方法

如果SHAP的适配仍有问题,可尝试以下替代方案:

  • LIME:针对每个模态单独生成局部解释,再整合结果。可自定义图像和表格的特征扰动策略,灵活性高。
  • Grad-CAM系列:仅针对图像模态,可视化模型关注的图像区域;表格模态可结合排列重要性(Permutation Importance),通过随机打乱特征值评估其对模型输出的影响。
  • 模型内置工具:TensorFlow/Keras可通过tf.GradientTape计算输入对输出的梯度,直接获取特征重要性;PyTorch可使用torch.autograd实现类似逻辑。
  • 遮挡测试:对图像的局部区域进行遮挡,或对表格特征进行置零,观察模型预测结果的变化,以此判断特征/区域的重要性。

内容的提问来源于stack exchange,提问作者lakshman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:27:51