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
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593201
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87600
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66771
  • cnn
    cnn
    +关注

    关注

    3

    文章

    327

    浏览量

    21298

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

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

收藏 人收藏

    评论

    相关推荐

    Matlab经典教程——入门精通

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

    我的matlab/ simulink成长历程 初始精通

    我的matlab/ simulink成长历程 初始精通还有比较大的文件包,要的留下邮箱
    发表于 07-04 16:03

    Matlab_Simulink_模型代码实现 matlab

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

    MATLAB2009b入门精通

    介绍给予MATLAB2009版本的基础知识,入门精通,内容较多,可以选择性的参考
    发表于 04-07 01:09

    TF之CNNCNN实现mnist数据集预测

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

    通过MATLAB中的UARTFPGA板读取数据不是连续的16

    我已生成单端口块内存核心,.coe文件中存在64字节数据。 .coe文件包含164个整数。当试图通过UART读取MATLAB中包含的块存储器时,在MATLAB数组中得到的数字11
    发表于 02-20 09:49

    FPGAFPGA如何实现通信

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

    matlab代码如何硬件实现

    转换到vhdl,或者通过vivado HLS转换到C然后转换到vhdl。请注意,matlab代码使用了几个预定义的图像处理结果。您认为什么是最好和最简单的方法。
    发表于 05-22 08:09

    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

    如何keil中导出内存数据matlab中?

    如何keil中导出内存数据matlab中?
    发表于 11-19 08:07

    FPGAASIC,异曲同工还是南辕北辙?

    ,这种新的模式可望成为FPGA市场的一个新成长点,值得我们关注。  最后做个小总结,  (1)对于AI硬件的实现而言,FPGA和ASIC的 优化路径有很大区别,
    发表于 03-28 11:14

    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实现卷积神经网络CNN的源代码

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