从C 到 matlab 到 FPGA,如何实现CNN的项目

描述

经过了前面的开胃菜,项目正式开始。一步步讲解这个模型怎么玩起来的。从C 到 matlab 到 FPGA ,三个平台联合起来完成这个 由 RTL 实现 CNN 的项目。

第一步,讲解深度学习模型在C中是怎么实现的,也就是梳理数据流怎么运算的。

第二步,讲解这个数据怎么使用,如何去一步步验证自己的设计。

第三步,根据前面的理解,在FPGA中如何去设计自己的代码。

首先,C的源码前面的文章中已经公开了,第一步当然是理解深度学习模型在C中是怎么实现的。

这个深度学习的模型 LeNet5 实现的功能是 MNIST 数据识别。MNIST数据集是一个手写数字的图片集,然后被制作成了一个特殊的文件格式 —— 已经不是图片了,变成了这么一个东西:

数据

网站上下载下来的是一个gz压缩文件,解压之后就是一个idx3-ubyte格式的文件。它包含了6w张用来做网络模型训练的图片,和1w张用来测试网络模型的图片。每张图片再搭配一个标签 —— 表明它是数据几。所以整个数据集就是 7w张图片 加 7w个标签。

不过你可以通过python轻松导出来,可以看到具体的图片和标签。解释这么多也够用了,有兴趣的朋友可以百度一下 MNIST ,比如下图,就是一个博主从数据集里扒出来的图。

数据

先理解了数据集,再看看 C语言源码。第一步先分别导入训练数据集和标签,再导入里测试数据集和标签,然后开始 load 模型 —— 第一次运行模型为空,于是对模型进行初始化。细心一点往下看这个初始化过程会觉得很有特色 —— 刻意让数据很随机,让它们都不相同是有好处,具体什么好处可以去看看吴恩达的视频。(我看了,云里雾里的还是不懂,所以也解释不清楚)

数据

后面就是训练和测试了,for是我后面添加的,可以让它训练很多次,提升精度。下面就是测试和打印,然后保存模型,释放空间。主程序完毕。

数据

拿到开源代码,运行一下,结果就是这样子的

数据

数据

数据

我就是在这个代码基础上,理解LeNet5的结构,然后量化。量化后再验证精度,然后导出模型,导出计算的中间数据。这个 C 代码就算物尽其用了。

有人觉得难懂?没关系,对于这个项目而言,我已经把C程序简化成了一张图,你可以忽略上述所有文字和程序,记住这张图就行。图的解释可以看QQ群中的文档,后面我还会详细讲解这张图的,以及图中用到的数据。

数据

数据

原文标题:LeNet5 MNIST 的 FPGA实现 3

文章出处:【微信公众号:FPGA攻城狮之家】欢迎添加关注!文章转载请注明出处。

  审核编辑:彭菁
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分