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

R语言MNIST深度网络手写数字识别(第三部分) 自定义图片预测报错求助

R Keras手写数字识别自定义图片预测报错排查

问题背景

使用MNIST数据集训练全连接网络完成手写数字识别的过程完全正常,调用模型预测本地用Windows Paint绘制的手写数字5(文件名为number5.jpg)时触发ValueError。

核心报错原因

你在处理自定义预测图片的步骤存在3处和训练数据预处理逻辑不一致的问题,是报错的根本原因:

  • 输入维度不匹配:MNIST训练用的是单通道灰度图,单张输入展平后是784维(2828),你读取的JPG是3通道RGB图,resize后维度是2828*3,强行截取前784维的操作无效,输入维度和模型输入层要求的input_shape = c(784)不匹配
  • 色彩空间不匹配:MNIST数据集是黑底白字,你用Paint绘制的是白底黑字,直接输入会导致特征完全匹配不上
  • 没有做归一化对齐:训练时你将训练/测试数据都除以255做了归一化,自定义预测图片没有做相同的预处理操作

修复后的自定义图片处理代码

library(EBImage)
setwd("C:/Users/hofo/Arbeidsmapper/Documents/NLP/NLP_BOSTOTTE/JPG_filer")

# 读取图片并转为单通道灰度图
mypic <- readImage("number5.jpg")
mypic <- channel(mypic, "gray") 
# 缩放到28*28尺寸
mypic <- resize(mypic, 28, 28) 
# 颜色反转:白底黑字转黑底白字,和MNIST特征对齐
mypic <- 1 - mypic
# 展平为784维,EBImage读取的灰度图默认范围是0-1,和训练时的归一化逻辑一致,无需额外除以255
newx <- array_reshape(mypic, c(1, 784))

# 预测,原有代码末尾的.[1:9]为冗余逻辑,单张图片仅返回1个预测结果
pred <- model %>% predict(newx) %>% k_argmax() %>% as.integer()
print(pred)

冗余代码说明

你原有代码里的array_reshape(mypic, c(28, 28, 3))、new <- NULL、new <- rbind(new, mypic)、newx <- new[1:1,1:784]均为错误的冗余操作,直接删除即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:06:03