项目地址:cakeinfer_fnumpy
项目介绍
这是一个使用纯NumPy实现的LeNet-5卷积神经网络框架,专注于帮助开发者深入理解神经网络的计算过程。项目的特点是:
- 纯NumPy实现,无深度学习框架依赖(并且使用numpy也不会导致过于复杂)
- 单线程串行计算,便于理解每一步操作
- 完整的训练和推理功能
- 自定义的权重存储格式,便于C++部署
- 详细的日志记录系统
项目结构
.
├── layers/ # 网络层实现
│ ├── common_layer.py # 基础层类
│ ├── conv2d.py # 卷积层
│ ├── fc.py # 全连接层
│ ├── activation.py # 激活函数
│ └── maxpooling.py # 最大池化层
├── models/ # 模型实现
├── utils/ # 工具函数
└── main.py # 主程序
当前功能
- MNIST数据集的加载和预处理
- LeNet模型的完整训练流程
- 模型权重的保存和加载
- 单样本推理和批量测试
- 详细的中间层输出和调试信息
待改进方向
1. 推理框架优化
- 移除训练相关代码,构建纯推理框架
- 优化权重加载和数据处理流程
- 提供更高效的推理接口
2. C++部署支持
- 实现C++版本的推理框架
- 提供HLS优化版本用于FPGA部署
- 添加性能测试和对比
3. 功能扩展
- 添加更多算子(如BatchNorm、Dropout等)
- 实现更多经典网络架构
- 支持更多数据集和任务
4. 其他改进
- 完善文档和示例
- 添加单元测试
- 优化内存使用
- 提供可视化工具
为什么参与这个项目?
-
深入理解神经网络
- 从零实现每个算子
- 理解前向传播和反向传播
- 掌握网络结构和计算过程
-
提升工程能力
- 学习工程化的代码组织
- 实践Python/C++混合开发
- 了解FPGA部署流程
-
积累实战经验
- 参与开源项目开发
- 学习团队协作
- 提升代码质量
-
扩展技术视野
- 了解深度学习框架原理
- 掌握模型优化技巧
- 学习硬件加速方法
如何参与
- Fork项目并克隆到本地
- 选择感兴趣的改进方向
- 提交Pull Request
- 在Issues中讨论和交流
项目愿景
这个项目的定位是一个用于学习和理解神经网络计算过程的教育性仓库。我们希望:
- 帮助开发者理解深度学习的基础知识
- 提供一个实践平台
- 培养算法工程师的基本功
参考资料
- LeNet-5原始论文
- NumPy官方文档
- FPGA部署相关资料
欢迎Star和Fork,也欢迎有兴趣的开发者加入项目开发!