MNIST训练的神经网络处理手绘28x28图片reshape报错如何解决
错误原因
你用cv2读取图片时默认返回的是3通道BGR彩色图像,即便图片肉眼看起来是黑白的,读入后的维度也是(28,28,3),总元素数为28*28*3=2352,和你要reshape的目标(1,28,28)总元素数784不匹配,因此触发报错。
修复方案
在resize操作前新增转灰度图的步骤即可,修改后的参考代码如下:
img_size=28 # 新增:将彩色图转换为单通道灰度图 img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img = cv2.resize(img, (img_size,img_size)) x = img.astype('float32') x /= 255.0 # 直接调整维度匹配模型输入,删除冗余的vstack等操作 images = x.reshape(1, 28, 28) # 如果你训练的模型要求输入带通道维度(形状为(1,28,28,1)),替换为下面这行即可 # images = x.reshape(1, 28, 28, 1) res=model.predict(images) print(f"识别的数字: {np.argmax(res)}")
额外注意
MNIST训练集的样本均为黑底白字,如果你自己绘制的是白底黑字的图片,归一化后需要反转像素值,否则会大幅降低识别准确率,添加代码如下:
x /= 255.0 # 新增:反转像素值适配MNIST数据集特征 x = 1.0 - x
内容的提问来源于stack exchange,提问作者Михаил Корчагин
相关产品推荐
相关产品推荐

