5431f9d6创建于 2025年9月18日历史提交
文件最后提交记录最后更新时间
9 个月前
9 个月前
9 个月前
9 个月前
README.md

纯仓颉手写数字识别

项目简介

本项目实现了一个 基于 BP 神经网络的手写数字识别,使用纯 仓颉(Cangjie)语言完成,并针对矩阵运算进行了优化,利用 spawn {} 协程并行处理,使训练耗时相比串行实现减少约 4 倍。 网络使用 Adam 优化器,一个 epoch 即可基本收敛,适合快速验证和实验。


功能特点

  • 纯仓颉实现:无需依赖 Python、TensorFlow、PyTorch 等深度学习框架。
  • 协程加速矩阵运算:利用 spawn {} 并行计算,实现矩阵乘法、梯度更新等操作加速。
  • Adam 优化器:在 BP 网络训练中自适应调整学习率,提高收敛速度。
  • 高效训练:在 MNIST 数据集上,一个 epoch 即可达到较高精度。

数据集

  • MNIST 手写数字数据集

    • 训练集:train-images-idx3-ubyte(60,000 张 28x28 灰度图)
    • 标签:train-labels-idx1-ubyte
    • 测试集:t10k-images-idx3-ubyte(10,000 张 28x28 灰度图)
    • 标签:t10k-labels-idx1-ubyte

数据集下载链接(Yann LeCun 官方): http://yann.lecun.com/exdb/mnist/


网络结构

层类型 输入大小 输出大小 激活函数
输入层 784 - -
隐藏层 784 500 ReLU
输出层 500 10 Softmax
  • 学习率: 0.005
  • 正则化系数: 0.01
  • Batch Size: 200
  • Epochs: 1

性能表现

  • 协程优化矩阵运算,使训练耗时下降约 4 倍。
  • 一个 epoch 即可基本收敛,测试集准确率可达到 约 90%-92%(与参数和初始化相关)。

文件结构

.
├─ main.cj             # 主程序
├─ BPNetwork.cj        # BP神经网络实现
├─ Trainer.cj          # 训练器实现
├─ MatrixUtils.cj      # 矩阵运算工具类实现
├─ MNISTLoader.cj      # MNIST 数据加载器
└─ README.md           # 项目说明

参考