这是一个从零开始、使用多种语言构建神经网络的学习项目
旨在通过亲手实现核心算法,深入理解其底层工作原理
.
├── data/ # 数据集,来自 kaggle 的 Fashion-MNIST CSV 数据
├── nn4c/ # C 实现
├── nn4numpy/ # Python 实现(基于 NumPy)
└── nn4torch/ # Python 实现(基于 PyTorch)
nn4c: 仅依赖标准库,大幅参考了 miniMNIST-c 的实现nn4numpy: 基于NumPy的实现,注释详细,功能完善nn4torch: 基于PyTorch的实现,高度抽象,代码简洁
目前面向 Fashion-MNIST 数据集分类任务,实现多层感知机
学习整理 miniMNIST-c 项目得到,没有多余的抽象,直观展示了神经网络的底层机制
- 网络架构:
- 包含 一个隐藏层 的多层感知机
- 使用 ReLU 作为隐藏层激活函数
- 核心算法:
- 完整的前向传播与反向传播
- 使用交叉熵损失作为损失函数
- 使用带动量的梯度下降进行优化
由 nn4c 重写而来,基于 NumPy 实现,代码清晰,注释详尽,易于理解
- 网络架构:
- 包含 两个隐藏层 的多层感知机
- 使用 ReLU 作为隐藏层激活函数
- 核心算法:
- 完整的前向传播与反向传播
- 使用交叉熵损失作为损失函数
- 使用带动量的梯度下降进行优化
- 集成 Dropout 正则化
根据 nn4numpy 重写,基于 PyTorch 实现,大量使用封装的 API,代码简洁,性能更优,功能和结构上与 nn4numpy 保持一致
# C
cd nn4c
make run # or zig build run -Doptimize=ReleaseFast
# Python
cd nn4numpy
python main.py # or uv run main.py