0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

FPGA攻城狮之家 来源:FPGA攻城狮之家 作者:FPGA攻城狮之家 2022-03-15 17:13 次阅读

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

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

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

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

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

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

820b645e-a3eb-11ec-952b-dac502259ad0.png

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

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

8219ba54-a3eb-11ec-952b-dac502259ad0.png

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

822e6b70-a3eb-11ec-952b-dac502259ad0.png

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

82464308-a3eb-11ec-952b-dac502259ad0.png

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

8260271e-a3eb-11ec-952b-dac502259ad0.png

82749244-a3eb-11ec-952b-dac502259ad0.png

8288b31e-a3eb-11ec-952b-dac502259ad0.png

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

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

82b2bed4-a3eb-11ec-952b-dac502259ad0.png

82c7e50c-a3eb-11ec-952b-dac502259ad0.png

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

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

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

    关注

    1625

    文章

    21665

    浏览量

    601745
  • 数据
    +关注

    关注

    8

    文章

    6884

    浏览量

    88812
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68333
  • cnn
    cnn
    +关注

    关注

    3

    文章

    351

    浏览量

    22168

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

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

收藏 人收藏

    评论

    相关推荐

    基于FPGACNN加速项目案例解析

    使用 C 语言的OpenCL 2a并行编程扩展来补充基于 FPGACNN 加速应用程序的开发。适用于卷积神经网络的 FPGA 器件的一个示例是英特尔可编程解决方案集团 (PSG)
    发表于 08-02 15:13 2846次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>CNN</b>加速<b class='flag-5'>项目</b>案例解析

    FPGA如何入门高手?

    本文首先介绍了FPGA的特点与FPGA芯片结构,其次分析了FPGA与ASIC及CPLD对比,最后介绍了FPGA基础入门高手相关知识与
    发表于 05-30 08:39 3.7w次阅读
    <b class='flag-5'>FPGA</b>如何<b class='flag-5'>从</b>入门<b class='flag-5'>到</b>高手?

    Matlab经典教程——入门精通

    Matlab经典教程——入门精通
    发表于 08-19 09:56

    Matlab_Simulink_模型代码实现 matlab

    Matlab_Simulink_模型代码实现 matlab
    发表于 10-04 08:36

    TF之CNNCNN实现mnist数据集预测

    TF之CNNCNN实现mnist数据集预测 96%采用placeholder用法+2层C及其max_pool法+隐藏层dropout法+输出层softmax法+目标函数cross_e
    发表于 12-19 17:02

    FPGAFPGA如何实现通信

    ,在接收器板上我们有XC7K410T-1FBG900C我们的要求如下我们想在这两个FPGA之间传输数据。数据速率可以每秒几位每秒5千兆位。我们应该能够在两个
    发表于 05-20 13:14

    FPGA入门精通(1) - 前序

    毕业后,从一个嵌入式硬件狗转做FPGA工程师,从中兜兜转转绕了不少弯路,为了给后人避坑,所以今天开始写有关FPGA入门精通的教程吧,这也算是给我国集成电路的发展做出微薄的贡献吧。
    发表于 06-23 23:52

    如何移植一个CNN神经网络FPGA中?

    训练一个神经网络并移植Lattice FPGA上,通常需要开发人员既要懂软件又要懂数字电路设计,是个不容易的事。好在FPGA厂商为我们提供了许多工具和IP,我们可以在这些工具和IP的基础上做
    发表于 11-26 07:46

    MCUFPGA

    MCUFPGA
    发表于 02-02 07:36

    FPGA 22年配角主角

    最初,FPGA 只是用于胶合逻辑,胶合逻辑算法逻辑再到数字信号处理、高速串行收发器和嵌入式处理器,FPGA 真正地配角变成了主角。
    发表于 11-30 16:25 17次下载

    matlab实现fpga功能的设计

    matlab实现fpga功能的设计 摘要:System Generator for DSP是Xilinx公司开发的基于Matlab的DSP开发工具?熗?时也是一个基于
    发表于 01-16 18:10 1.1w次阅读
    用<b class='flag-5'>matlab</b>来<b class='flag-5'>实现</b><b class='flag-5'>fpga</b>功能的设计

    Matlab_Simulink模型代码实现

    Matlab_Simulink模型代码实现,感兴趣的小伙伴们可以看看。
    发表于 08-09 17:33 0次下载

    C游戏编程入门精通

    C游戏编程入门精通
    发表于 03-31 15:56 0次下载

    MATLAB进阶》程序与数据资料下载

    MATLAB进阶》程序与数据
    发表于 01-13 10:09 18次下载

    MATLAB实现卷积神经网络CNN的源代码

    MATLAB实现卷积神经网络CNN的源代码
    发表于 04-21 10:15 16次下载