TF.Keras模型预测自定义图像时Matrix size-incompatible报错问题咨询
报错原因
- 输入缺少batch维度:Keras的
predict接口要求输入张量的第一维为批量大小(batch_size),你注释了np.expand_dims相关代码,输入模型的gray是形状为(15,15)的二维数组,模型会误将第一个15识别为batch_size,第二个15识别为特征长度,和第一层全连接层要求的675维输入特征不匹配。 - 输入通道数和训练阶段不匹配:从报错中全连接层权重维度
[675,128]反推,你训练模型时的输入是15*15*3的三通道图像(15×15×3=675),但预测阶段你将图像转为了单通道灰度图,就算补上batch维度,Flatten后也只有225维,依然不匹配。
解决方案
- 恢复被注释的预处理代码,给输入增加batch维度:
trial = cv2.imread("Trial\\3.png") # 如果训练用的是彩色图,删除下面这行灰度转换代码 gray = cv2.cvtColor(trial, cv2.COLOR_BGR2GRAY) plt.imshow(gray) plt.show() gray = cv2.resize(gray, (15, 15)) # 取消下面两行的注释 gray = img_to_array(gray) gray = np.expand_dims(gray, axis=0) pred = model.predict(gray)
- 对齐输入通道数:如果训练时用的是三通道彩色图,直接删除预测代码中的
cv2.cvtColor(trial, cv2.COLOR_BGR2GRAY)灰度转换步骤即可;如果训练时确实用的是单通道灰度图,需要重新调整模型结构,确保输入维度和训练数据匹配。 - 可选优化:定义模型时显式指定输入形状,避免后续维度混乱,比如三通道15×15输入的场景下,第一层Flatten写成:
model.add(tf.keras.layers.Flatten(input_shape=(15,15,3)))
内容的提问来源于stack exchange,提问作者Yousef Hesham
相关产品推荐
相关产品推荐

