使用SHAP GradientExplainer分析Inception V3时遇输入张量错误求助
解决Inception V3 + SHAP GradientExplainer的输入匹配问题
我之前成功用GradientExplainer可视化过Inception V3的结果,你的错误核心就是输入数据的形状/ dtype和模型输入层要求不匹配,和Inception V3的299×299输入尺寸直接相关,以下是具体排查和解决步骤:
确认输入数据的基本属性
- 检查形状:输入样本必须是
(样本数, 299, 299, 3),别沿用VGG/MobileNet的224尺寸。单张图要扩展维度成(1,299,299,3)(比如用np.expand_dims(img, axis=0)),可以用x.shape查看当前形状。 - 检查数据类型:模型输入要求float类型,确保数据是
float32或float64,别是直接读入图片的uint8格式。用x.dtype查看,不对的话转换:x = x.astype('float32')。
- 检查形状:输入样本必须是
核对模型输入层的要求
打印模型输入层信息确认:print(model.input)输出应类似
Tensor("input_1:0", shape=(None, 299, 299, 3), dtype=float32),如果形状不对,说明加载模型时输入层设置有误。正确的代码示例流程
import shap import numpy as np from tensorflow.keras.applications.inception_v3 import InceptionV3, preprocess_input # 加载训练好的模型 model = InceptionV3(weights='your_trained_weights.h5', include_top=True, input_shape=(299,299,3)) # 准备测试样本 img = load_your_image() # 自行实现加载逻辑,确保尺寸为299×299×3 img = preprocess_input(img) # 用官方预处理,符合模型输入要求 x = np.expand_dims(img, axis=0) # 扩展批量维度 # 初始化GradientExplainer并计算SHAP值 explainer = shap.GradientExplainer(model, x) shap_values = explainer.shap_values(x) # 可视化结果 shap.image_plot(shap_values, x)容易踩的坑
- 预处理错误:InceptionV3的预处理不是简单除以255,而是
(x / 255.0 - 0.5) * 2,用官方preprocess_input最稳妥。 - 背景样本不匹配:如果用背景样本初始化GradientExplainer,背景样本的形状、dtype必须和输入样本完全一致,不能用224尺寸的背景数据。
- 预处理错误:InceptionV3的预处理不是简单除以255,而是
内容的提问来源于stack exchange,提问作者Maral
相关产品推荐
相关产品推荐

