• 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攻城狮之家

             

  • 相关阅读:
    Flask 学习7. make_response() 自定义响应内容 上海
    Flask 学习5.请求对象Request 上海
    Flask 学习3.设置 HTTP 请求 方法(get/post) 上海
    Flask 学习2.url访问地址(路由配置) 上海
    Flask 学习9. 开启调试模式(debug模式)的2种方法 上海
    modelmapper 简单智能的对象映射工具
    使用jsch 实现ssh tunnel
    jimfs java 内存文件系统实现
    基于commonsdiscovery 开发简单的插件化java系统
    dremio 20 版本可以下载体验了
  • 原文地址:https://www.cnblogs.com/sepeng/p/15969882.html
Copyright © 2020-2023  润新知