news 2026/2/24 22:08:17

手写数字识别实战:从MNIST数据集到神经网络推理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手写数字识别实战:从MNIST数据集到神经网络推理

手写数字识别实战:从MNIST数据集到神经网络推理

MNIST数据集简介

MNIST是机器学习领域最著名的数据集之一,包含0-9的手写数字图像:

  • 训练图像:60,000张
  • 测试图像:10,000张
  • 图像尺寸:28×28像素(灰度图像)
  • 像素值范围:0-255

数据加载与预处理

使用提供的mnist.py脚本加载数据:

importsys,os sys.path.append(os.pardir)fromdataset.mnistimportload_mnist# 加载MNIST数据集(x_train,t_train),(x_test,t_test)=load_mnist(flatten=True,# 将图像展开为一维数组normalize=True,# 将像素值正规化到0.0-1.0one_hot_label=False)print(f"训练数据形状:{x_train.shape}")# (60000, 784)print(f"训练标签形状:{t_train.shape}")# (60000,)

关键参数说明:

  • normalize: 是否将像素值除以255进行正规化
  • flatten: 是否将28×28的图像展开为784维向量
  • one_hot_label: 是否使用one-hot编码表示标签

神经网络推理实现

1. 网络结构

  • 输入层:784个神经元(对应28×28像素)
  • 隐藏层1:50个神经元
  • 隐藏层2:100个神经元
  • 输出层:10个神经元(对应0-9数字分类)

2. 核心函数

importpickleimportnumpyasnpdefsigmoid(x):"""Sigmoid激活函数"""return1/(1+np.exp(-x))defsoftmax(x):"""Softmax函数"""ifx.ndim==2:x=x-np.max(x,axis=1,keepdims=True)exp_x=np.exp(x)returnexp_x/np.sum(exp_x,axis=1,keepdims=True)else:x=x-np.max(x)exp_x=np.exp(x)returnexp_x/np.sum(exp_x)definit_network():"""加载预训练的网络参数"""withopen("sample_weight.pkl",'rb')asf:network=pickle.load(f)returnnetworkdefpredict(network,x):"""前向传播推理"""W1,W2,W3=network['W1'],network['W2'],network['W3']b1,b2,b3=network['b1'],network['b2'],network['b3']# 第1层a1=np.dot(x,W1)+b1 z1=sigmoid(a1)# 第2层a2=np.dot(z1,W2)+b2 z2=sigmoid(a2)# 输出层a3=np.dot(z2,W3)+b3 y=softmax(a3)returny

单张图像推理

# 获取测试数据x_test,t_test=get_data()# 初始化网络network=init_network()# 单张图像推理accuracy_cnt=0foriinrange(len(x_test)):y=predict(network,x_test[i])# 预测概率分布p=np.argmax(y)# 取概率最高的索引ifp==t_test[i]:# 与真实标签比较accuracy_cnt+=1accuracy=float(accuracy_cnt)/len(x_test)print(f"识别精度:{accuracy:.4f}")# 约93.52%

批处理优化

批处理能大幅提升计算效率,充分利用NumPy的矩阵运算优化:

defpredict_batch(network,x_batch):"""批量推理"""W1,W2,W3=network['W1'],network['W2'],network['W3']b1,b2,b3=network['b1'],network['b2'],network['b3']a1=np.dot(x_batch,W1)+b1 z1=sigmoid(a1)a2=np.dot(z1,W2)+b2 z2=sigmoid(a2)a3=np.dot(z2,W3)+b3 y=softmax(a3)returny# 批处理推理batch_size=100accuracy_cnt=0foriinrange(0,len(x_test),batch_size):# 提取批数据x_batch=x_test[i:i+batch_size]t_batch=t_test[i:i+batch_size]# 批量推理y_batch=predict_batch(network,x_batch)# 获取预测结果(axis=1表示按行取最大值索引)p_batch=np.argmax(y_batch,axis=1)# 统计正确数量accuracy_cnt+=np.sum(p_batch==t_batch)accuracy=float(accuracy_cnt)/len(x_test)print(f"批处理识别精度:{accuracy:.4f}")

关键概念解析

1. 数据正规化(Normalization)

将输入数据的值调整到特定范围(如0.0-1.0),有助于:

  • 提高训练稳定性
  • 加速收敛速度
  • 改善模型性能

2. 批处理(Batch Processing)

  • 优势:减少数据读取开销,充分利用硬件并行计算能力
  • 实现:通过axis参数指定计算维度
  • 效果:显著提升推理速度

3. 网络形状对应

# 网络各层参数形状W1.shape# (784, 50) 输入层→隐藏层1W2.shape# (50, 100) 隐藏层1→隐藏层2W3.shape# (100, 10) 隐藏层2→输出层# 数据处理形状变化x_test.shape# (10000, 784) 10000张图像,每张784维x_batch.shape# (100, 784) 100张图像批处理y_batch.shape# (100, 10) 100个预测结果,每个10维概率分布

可视化图像数据

fromPILimportImageimportmatplotlib.pyplotaspltdefimg_show(img_array):"""显示MNIST图像"""img=img_array.reshape(28,28)# 从784维恢复为28×28plt.imshow(img,cmap='gray')plt.axis('off')plt.show()# 显示第一张训练图像img_show(x_train[0])print(f"标签:{t_train[0]}")

总结与展望

通过本文,我们实现了:

  1. MNIST数据集的加载和预处理
  2. 神经网络的前向传播推理
  3. 单张图像和批量图像的分类
  4. 达到了约93.5%的识别精度

下一步优化方向

  • 调整网络结构(层数、神经元数量)
  • 使用更好的优化算法
  • 添加正则化防止过拟合
  • 使用卷积神经网络(CNN)进一步提升精度

批处理技术不仅是推理阶段的优化手段,在训练阶段同样重要。后续学习深度神经网络时,我们将看到批处理如何与梯度下降算法结合,实现高效的学习过程。

思考题:如果将批大小从100改为1,会对计算效率和精度产生什么影响?为什么大多数情况下我们不使用批大小为1?


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/23 23:54:52

Z-Image-Turbo种子复现:如何精准还原满意图像结果

Z-Image-Turbo种子复现:如何精准还原满意图像结果 引言:从“偶然之美”到“可控创作”的跨越 在AI图像生成的世界中,我们常常会遇到这样的场景:某次随机生成中出现了一张近乎完美的作品——光影恰到好处、构图自然和谐、细节丰富动…

作者头像 李华
网站建设 2026/2/23 3:36:11

如何快速掌握PDF编辑:新手完全指南

如何快速掌握PDF编辑:新手完全指南 【免费下载链接】pdfarranger Small python-gtk application, which helps the user to merge or split PDF documents and rotate, crop and rearrange their pages using an interactive and intuitive graphical interface. …

作者头像 李华
网站建设 2026/2/19 20:11:26

scMetabolism单细胞代谢分析完整指南:从零基础到精通应用

scMetabolism单细胞代谢分析完整指南:从零基础到精通应用 【免费下载链接】scMetabolism Quantifying metabolism activity at the single-cell resolution 项目地址: https://gitcode.com/gh_mirrors/sc/scMetabolism 在单细胞生物学研究领域,如…

作者头像 李华
网站建设 2026/2/16 14:47:47

从GitHub star增长看Z-Image-Turbo社区活跃度变化

从GitHub star增长看Z-Image-Turbo社区活跃度变化 引言:开源项目生命力的风向标——Star趋势与社区活力 在AI模型快速迭代的今天,一个项目的GitHub Star数量不仅是技术影响力的体现,更是其社区健康度和用户认可度的重要指标。阿里通义推出的…

作者头像 李华
网站建设 2026/2/21 23:13:36

Windows 10 OneDrive彻底卸载终极指南:5分钟释放系统资源

Windows 10 OneDrive彻底卸载终极指南:5分钟释放系统资源 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 想要彻底清理Windows 10…

作者头像 李华
网站建设 2026/2/21 20:56:04

AI创作新潮流:Z-Image-Turbo支持多场景一键生成,企业可用

AI创作新潮流:Z-Image-Turbo支持多场景一键生成,企业可用 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 在AI内容创作领域,图像生成技术正以前所未有的速度演进。阿里通义实验室推出的Z-Image-Turbo模型,凭…

作者头像 李华