纯C语言实现深度学习,能识别图像,不依赖第三方库
只是做了一些微小的工作MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM搜索github发现,使用C语言实现深度学习的项目确实不少,但是整体上质量都不太行。于是笔者决定本身写一个,要达到的方针是:
[*]纯C99,不用C++
[*]核心部门不依赖第三方库,甚至不需要stdio
[*]便利移植,不需要OS就可以跑
有兴趣的同学请直接clone
欢迎star/fork/comment三连
一、代码布局
在src/generic下面是这个深度学习库的核心部门,它没有include任安在这个目录之外的东西,包罗C语言的尺度库也没有。因此任何一个撑持C99的C编译器都可以进行编译。
src的其他目录是这个库的“移植方针”。在编译的时候要指定移植方针,移植方针目录里的文件会优先于generic目录里的同名文件,这样就能便利在分歧的方针下进行优化。常用的一些方针如下:
[*]os,适用于有操作系统的环境。这个方针需要使用stdio和stdlib,其实只需要提供printf和malloc就行了
[*]avx,适用于有Intel AVX指令集的环境。
[*]gloss,适合于有libgloss的嵌入式开发环境,一会儿我们在RISC-V环境中会用到
[*]emu,适合于AI加速器RTL仿真的环境,putc会使用向特定地址写入数据的方式实现,这样利于仿真环境抓取
二、MNIST 手写识别
在test/mnist目录下有手写识此外例子,输入“图片”以浮点数组的形式直接放在代码里:
离远了看就是“8”
直接敲make就可以得到最后一层的输出,以及推理的成果(第8个数最大,那就识别为8)
如果你安装了Python以及PyTorch,可以去py目录运行 python3 test.py,你可以使用PyTorch计算得到完全不异的成果,验证这个项目推理成果的正确性。
三、Resnet50 图像识别
Resnet50的权重太大了,没法包含在这个库里,所以请读者自行按照test/resnet50中的说明,安装Python以及TensorFlow之后,就能得到本项目所需要的权重。
然后还是在test/resnet50中敲make,可以得到推理成果
http://pic4.zhimg.com/v2-12e74681d79d1e46ae14ea0fb67b328b_r.jpg
推理成果,和TensorFlow的成果完全一致
四、BareMetal 交叉编译
既然本项目是个纯C库,以BareMetal模式运行在其他CPU上当然不成问题。请首先按照项目README的要求安装好RISC-V环境的交叉编译器、模拟器以及libgloss。
还是回到test/mnist这个目录,只需要
make clean
make riscv就可以拿到和刚才一模一样的输出了
五、这个项目有没有详细的资料
没有,本来就是for fun。此外代码里也没什么注释。代码本身就是注释。 大佬请问最终C语言实现深度学习的结果,就是代码训练速度和准确率这些和用python调用库写的有区别吗?[好奇] 您好,请问如果不需要一些特殊的函数例如printf,那么对于裸机环境,Newlib+libgloss是不是就可以免移植直接编译运行呢 同问 真实大佬中佬[爱]
页:
[1]