手写一个神经网络训练框架 (TinyTorch)

December 28, 2024 前段时间比较闲,正好在学习 AI 相关的东西,决定用 C++ 写一个神经网络训练框架,类似于图形学的入门项目软件渲染器,不依赖第三方库,从零开始实现,目标是能进行 MNIST 训练,经过几周的投入,目前算是初步完成了,代码已放到 Github: https://github.com/keith2018/TinyTorch 之前的一些手写项目: 手写一个 GPT(TinyGPT) 手写一个 Shader 虚拟机 (SPVM) 手写一个 C++ 软件渲染器(SoftGLRender) 框架 项目基于 C++ 实现,可选依赖 OpenBLAS 进行矩阵乘法加速(gemm),可通过 cmake 参数 -DUSE_BLAS=ON/OFF 来开关,无其它三方依赖。C++ 类/接口主要模拟 PyTorch 的 API,包括 Tensor/Function/Module/Loss/Optimizer/Scheduler/Dataset/DataLoader 等,麻雀虽小,五脏俱全,demo 目录有几个示例程序,包括 MNIST 的完整训练代码 demo/demo_mnist.cpp。 下面是 C++ 版的 MNIST 模型定义,与 PyTorch 写法类似,区别主要是多了手动 registerModules()(目前还不能自动注册): class Net : public nn::ModuleContinue reading “手写一个神经网络训练框架 (TinyTorch)”