• 神经网络LeNet5的 的 FPGA RTL级实现 4


            前面讲解了C程序的基本情况,下面就是重中之重 —— 数据如何使用。也就是群中分享的文件。首先看两个文件夹

           dat_save_img5    --->  此文件夹中采用MNIST数据集里第五张图的数据。方便在matlab中导入。

          dat_save_img5_fpga   --- > 此文件夹中的数据与上面的一样,只是采用里并行输出方式,方便在FPGA中导入。当然你在FPGA中采用上一个文件夹中的数据完全没问题。

          例如 权重 W23 在上述两个文件夹中分别是。第二种排列,我将数据导入到FPGA的rom中,一个地址读一次就可以将一个 5x5的权重矩阵读出来,第一种排列导入到rom中就需要递增25个地址读25次。就是这个差别了。

                                       

            

            下面说第一层数据的引用。

            第一层,输入数据为 32x32 的矩阵,打开txt文件一张二值化的 4  显现出来,这个在之前的 2 章节有截图。这个 32x32 的图像经过了 6 个 5x5的卷积核,卷积之后出来了 6 张 28x28 的小图。打开 dat_save_img5_fpga 中的 lay1_dat.txt 还可以分辨出6张4的二值化小图。整个运算过程是什么样子的呢? 便于理解我将 matlab中的程序贴一部分出来,三张图依次是 导入txt数据(cell),转换成double类型准备运算,运算过程

          妥妥的 5x 5 卷积之后再加上一个 bias,然后relu一下  ——   负数就归0.  第一层 OVER !所以用FPGA实现 神经网络是很简单的(需要一个量化后的精度验证环境)。需要注意一点的是,matlab中强制类型转换默认是四舍五入,导致和C语言中的导出的数据有一点点差别,但是不影响最终的结果。

           下面一层是pooling ,就是简单的2x2的矩形框里找最大数,步进为2。 matlab实现方式如下:

            

         依次类推到最后一层,第六层。也就是文件里面的outx.txt的数据。

     

            

      最终结果,因为C中的截断 与matlab中默认的四舍五入 两种定点化方式不同导致结果数据大小有一点点不同。但是不影响最终结论。推断出也是数据4 。

       前面的铺垫如此了,后面的文章就是专门介绍 HDL 部分。

      

    需要数据的请入QQ群:162664354

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

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

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

  • 相关阅读:
    tars go版本源码分析
    goim源码阅读
    vue weixin源码解读
    避免加锁的骚操作
    git一些常用操作
    eclipse 的习惯配置
    ai资源站
    转载 github上的一些安全资源收集
    转载 一个统计代码行数的python脚本
    C语言开发工具
  • 原文地址:https://www.cnblogs.com/sepeng/p/16002539.html
Copyright © 2020-2023  润新知