Repolode
itskonrad

itskonrad/tinymnist

用纯 C 语言编写的极简神经网络,约 250 行代码,用于识别手写 MNIST 数字。

Star
1,287
Fork
130
未关闭 Issue
3
最近提交
25天前

这是什么?

tinymnist 是一个用纯 C 实现的小型神经网络,用于识别 MNIST 数据集中的手写数字。整个程序约 250 行,除 C 标准库外没有其他依赖。

模型结构为 784 个输入、256 个单元的 ReLU 隐藏层和 10 类 softmax 输出,使用交叉熵损失与带动量的 SGD 进行训练。MNIST 训练集已放在 data 目录中,用 gcc 编译后即可直接运行。

项目给出的结果是训练 20 个 epoch 后测试准确率约 98%,每个 epoch 耗时约半秒。训练集占数据的 80%,其余 20% 用于测试。隐藏层大小、学习率、动量、训练轮数和数据划分比例等超参数,可通过 main.c 顶部的 #define 常量修改。

核心功能

  • 01纯 C 实现,除标准库外无其他依赖
  • 02两层全连接网络,采用 ReLU 与 softmax
  • 03使用交叉熵损失和带动量的 SGD 训练
  • 04内置 MNIST 训练数据,开箱即可运行
  • 05超参数可通过 #define 常量调整

适用场景

  • 从底层理解神经网络的工作原理
  • 在不依赖深度学习框架的情况下学习前向与反向传播
  • 作为 MNIST 分类实验的精简基线

快速上手

  1. 1

    使用 gcc 编译程序

    gcc -O3 -march=native -ffast-math -o main main.c -lm
  2. 2

    运行程序(MNIST 数据已包含在 data/ 目录中)

    ./main

使用前须知

  • 这只是一个用于教学的极简模型,不适合实际的数字识别应用。
  • 配置需要编辑 main.c 中的 #define 常量并重新编译。

收录于专题

标签

常见问题

tinymnist 是什么?
用纯 C 语言编写的极简神经网络,约 250 行代码,用于识别手写 MNIST 数字。 tinymnist 是一个用纯 C 实现的小型神经网络,用于识别 MNIST 数据集中的手写数字。整个程序约 250 行,除 C 标准库外没有其他依赖。
tinymnist 可以免费使用吗?用的什么许可证?
tinymnist 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
tinymnist 还在维护吗?
活跃维护中。tinymnist 最近一次提交是在 2026年10月13日。
tinymnist 适合用来做什么?
从底层理解神经网络的工作原理 在不依赖深度学习框架的情况下学习前向与反向传播 作为 MNIST 分类实验的精简基线
tinymnist 怎么安装和运行?
使用 gcc 编译程序: gcc -O3 -march=native -ffast-math -o main main.c -lm 运行程序(MNIST 数据已包含在 data/ 目录中): ./main
在哪里获取 tinymnist?
源代码和安装说明在 GitHub 上:https://github.com/itskonrad/tinymnist

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目