TensorFlow Fashion MNIST模型预测自定义图像形状不兼容问题咨询
解决方案
你遇到的报错核心原因有两点:
- 加载的自定义图像为3通道RGB格式,和Fashion MNIST训练用的单通道灰度图格式不匹配
- 没有将图像调整为模型输入要求的一维784维格式,28283=2352正好是报错里提到的输入维度数值
完整可运行的处理代码
import numpy as np from tensorflow.keras.utils import load_img, img_to_array # 第一步:加载图像时直接指定灰度模式,同时调整尺寸为28*28 img = load_img("test.jpg", target_size=(28,28), color_mode="grayscale") # 第二步:转为numpy数组并做归一化(和训练集的预处理逻辑保持一致) img_array = img_to_array(img) # 去掉多余的通道维度,得到(28,28)的形状,和Fashion MNIST数据集格式对齐 img_array = np.squeeze(img_array, axis=-1) # 像素值缩放到0-1区间,必须和训练时的预处理一致 img_array = img_array / 255.0 # 第三步:调整形状匹配模型输入要求:增加batch维度,拉平为784维 processed_img = img_array.reshape(1, 784) # 此时直接传入预测即可 predict_result = probability_model.predict(processed_img)
特殊情况处理
如果你已经加载了RGB格式的图像,可以用以下方法转成单通道灰度图:
- 用OpenCV转换:
import cv2 rgb_img = cv2.imread("test.jpg") gray_img = cv2.cvtColor(rgb_img, cv2.COLOR_BGR2GRAY) resized_gray = cv2.resize(gray_img, (28,28)) # 后续同样做归一化和reshape操作即可
- 用numpy直接计算灰度值:对三个通道取加权平均,公式为
gray = 0.2989 * R + 0.5870 * G + 0.1140 * B
验证方法
处理完成后打印processed_img.shape,确认输出为(1, 784)即可正常传入模型预测。
内容的提问来源于stack exchange,提问作者Adith Raghav
相关产品推荐
相关产品推荐

