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

如何使用MNIST数据集实现大于9的数字识别

现有代码不适用的核心原因

你当前的模型是针对MNIST单数字0-9设计的10分类模型,仅支持输出10种离散分类结果,既没有学习过大数、小数的特征,结构本身也不支持输出连续值或多字符组合结果,因此无法满足需求。

场景1:手写多位数/小数图像识别(输入为手写图像,输出对应数值)

如果你的需求是识别写有大于9的数字、小数的图像,按以下步骤调整:

  • 数据集替换:原生MNIST仅包含单数字0-9样本,无法支撑大数/小数识别,你可以选用包含多数字的公开数据集,也可以自行拼接MNIST单数字、增加手写小数点样本生成合成数据集,标注为完整的数值字符串。
  • 模型结构调整:
    1. 若预测的数值长度固定:可设置多分类头,每个字符位置对应一个分类器,分类类别包含0-9和小数点共11类,总损失为各位置分类损失的和。
    2. 若预测的数值长度不固定:可采用OCR领域常用的CRNN+CTC损失结构,无需提前固定字符长度,可直接输出任意长度的数字、小数点组合,转换后即可得到目标数值。
  • 输出层与损失调整:删除原最后一层units=10的softmax层和分类损失,替换为对应场景的输出结构与损失函数。

场景2:纯数值回归预测(输入为特征向量,输出连续数值)

如果你的需求是预测连续数值而非图像识别,可直接将任务调整为回归任务,修改后的代码如下:

import tensorflow as tf

model = tf.keras.models.Sequential()
# 若为纯数值输入可删除Flatten层,替换为对应输入层
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(units=128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(units=128, activation=tf.nn.relu))
# 回归任务输出层:单神经元,无激活函数
model.add(tf.keras.layers.Dense(units=1))

# 编译参数替换为回归适配配置
model.compile(optimizer='adam', loss='mse', metrics=['mae'])

# 训练时y_train直接传入对应的连续数值标签即可
model.fit(X_train, y_train, epochs=10)

内容的提问来源于stack exchange,提问作者OK 400

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 09:27:04