LeNet5 MNIST 的 FPGA实现 3

        经过了前面的开胃菜,项目正式开始。一步步讲解这个模型怎么玩起来的。从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群中的文档,后面我还会详细讲解这张图的,以及图中用到的数据。

        

            

 

 

需要数据的请入QQ群:162664354

对于本文需要视频讲解的请到 B站:

https://www.bilibili.com/video/BV1Ca411b7qf/

需要看公众号的请到: FPGA攻城狮之家

         

 

posted on 2022-03-12 21:23  清霜一梦  阅读(461)  评论(0编辑  收藏  举报