CNN卷积神经网络框架_fpga 神经网络

CNN卷积神经网络框架_fpga 神经网络理论建立与效果展示正在写。。。环境:Vivado2019.2。Part:xcku040-ffva1156-2-i,内嵌DSP个数1920个,BRAM600个也就是21.1Mb。说明:通过识别加高斯白噪声的正弦波、余弦波、三角波较简单的实例来利用FPGA实现一维CNN网络,主要是实现CNN网络的搭建。也就是将下列数据传输至FPGA,识别出下面哪些是正弦波、余弦波、三角波,通过简单实例实践,在融会贯通。实现流程:训练参数:通过pytorch对10000个训练集进行训练获得训练参数,反向计算不

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

理论建立与效果展示

环境:Vivado2019.2。
Part:xcku040-ffva1156-2-i,内嵌DSP个数 1920个,BRAM 600个也就是21.1Mb。

说明:通过识别加高斯白噪声的正弦波、余弦波、三角波较简单的实例来利用FPGA实现一维CNN网络,主要是实现CNN网络的搭建
也就是将下列数据传输至FPGA,识别出下面哪些是正弦波、余弦波、三角波,通过简单实例实践,在融会贯通,最终实现雷达辐射源调制方式识别。
在这里插入图片描述

实现流程:
训练参数:通过pytorch对10000个训练集进行训练获得训练参数,反向计算不在FPGA中实现。
数据产生:Matlab产生1000个测试集。
数据传输:通过Pcie高速总线将数据传输到FPGA中进行识别。
实践效果:信噪比在 -20~5dB之间识别率100%。
数据长度:100。
CNN网络:第一层卷积:1个通道,6个卷积核,卷积核元素为5。
CNN网络:池化。
CNN网络:第二层卷积:6个通道,16个卷积核,卷积核元素为5。
CNN网络:池化。
CNN网络:第三层卷积:16个通道,16个卷积核,卷积核元素为5。
CNN网络:全连接。
CNN时效:100M时钟下,一条长度为100的数据识别耗时239个时钟周期,也就是2390ns=2.39us(因为综合实践太长了,还没实现最优,网络中有可以优化的地方,可以控制在200个时钟周期,也就是2us左右,也就是长度为100的数据的第一个数据到达FPGA到波形识别完成耗时为2us)。

第一节:基于FPGA的一维卷积神经网络CNN的实现(一)框架
第二节:基于FPGA的一维卷积神经网络CNN的实现(二)资源分配
第三节:基于FPGA的一维卷积神经网络CNN的实现(三)训练网络搭建及参数导出(附代码)
第四节:基于FPGA的一维卷积神经网络CNN的实现(四)Matlab前向验证(附代码)
第五节:基于FPGA的一维卷积神经网络CNN的实现(五)数据量化(附代码)
第六节:基于FPGA的一维卷积神经网络CNN的实现(六)卷积层实现
第七节:基于FPGA的一维卷积神经网络CNN的实现(七)池化层实现
第八节:基于FPGA的一维卷积神经网络CNN的实现(八)激活层实现


对CNN网络先进行简单介绍,详细了解请移至互联网。

一、卷积层

数学表达式

连续形式:
f ∗ g = ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ {\rm{f * g = }}\int_{ – \infty }^\infty {f(\tau )} g(t – \tau )d\tau fg=f(τ)g(tτ)dτ
离散形势:
f ∗ g = ∑ τ = − ∞ ∞ f ( τ ) g ( n − τ ) {\rm{f * g = }}\sum\limits_{\tau= – \infty }^\infty {f(\tau )} g(n – \tau ) fg=τ=f(τ)g(nτ)

先对g函数进行向左翻转,然后再把g函数平移到n,在这个位置两个函数对应点相乘,再把所有位置相乘的结果相加。

1.二维卷积

二维卷积matlab演示:

5×5的矩阵a与3×3的矩阵b相卷积:
请添加图片描述

二维卷积图示(图中卷积核翻转还是和原来一样):

请添加图片描述
所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动相应位置相乘然后再叠加。

2.一维卷积

一维卷积matlab演示:
请添加图片描述
一维卷积图示(注意卷积核是翻转后的):
请添加图片描述
卷积结果的长度=数据长度+卷积核长度-1。

总而言之卷积的本质就是 翻转→滑动(对应相乘)→叠加的结果。

二、池化层

池化即降采样,即降低数据的大小,池化方法主要有最大池化、平均池化,其中最常用的就是最大池化。

一维最大池化过程:
简而言之就是在卷积结果中以步长为2提取相邻结果的最大值。减少了特征,导致参数减少,进而简化卷积网络计算时的复杂度。

数据长度为10,卷积的结果我们取和数据长度一样的长度,池化结果的长度为5。
请添加图片描述

三、全连接层

这里只说怎么做,原理自行了解,简而言之就是将最终多个通道的卷积结果拼接成一条数据。
请添加图片描述

四、网络搭建与演示

波形识别网络如下:

网络层 输入 详细 输出
第一层卷积 1通道 100点数据 6个卷积核,卷积核元素为5 6通道 每通道100点数据
第一层池化 6通道 每通道100点数据 最大池化 6通道 每通道50点数据
第二层卷积 6通道 每通道50点数据 16个卷积核,卷积核元素为5 16通道 每通道50点数据
第二层池化 16通道 每通道50点数据 最大池化 16通道 每通道25点数据
第三层卷积 16通道 每通道25点数据 16个卷积核,卷积核元素为5 16通道 每通道25点数据
全连接 16通道 每通道25点数据 数据拼接 1通道 400点数据

网络层参数分析:
训练、训练、训练,训练的结果是什么?无非就是下面的权重和偏置参数。知道这些参数导入到FPGA搭建的加速网络里面,完整的人工智障CNN就搭建出来了。

网络层 通道数 核和核内元素 权重个数 偏置个数
第一层卷积 1 6个核,每个核5个元素 1×6×5 6 36
第二层卷积 6 16个核,每个核5个元素 6×16×5 16 496
第三层卷积 16 16个核,每个核5个元素 16×16×5 16 1296
全连接 1 三种波形,最后一层卷积16通道每通道25点数据 3×400 3 1203

网络图形化展示:

第一层卷积+池化:
输入:输入为1通道,数据长度为100(我们要识别的波形数据)。
卷积核:卷积核个数为6(训练出来的)。
卷积输出:6通道,数据长度为100(池化要用的)。
池化输出:6通道,数据长度为50(下一层卷积滴输入)。
请添加图片描述
第二层卷积+池化
输入:输入为6通道,数据长度为50(上一层卷积的输出)。
卷积核:卷积核个数为16(训练出来的)。
卷积输出:16通道,数据长度为50(池化要用的)。
池化输出:16通道,数据长度为25(下一层的输入)。
请添加图片描述
第三层卷积+全连接
输入:输入为16通道,数据长度为25(上一层的输出)。
卷积核:卷积核个数为16(训练出来的)。
卷积输出:16通道,数据长度为25(全连接要用的)。
全连接输出:1通道,数据长度为400(网络最终输出一条数据)。

请添加图片描述
三层卷积做完了那到底是什么波?

全连接输出了1通道400点的数据。
全连接参数为3个通道400点的参数。
让这3个通道分别和1通道全连接的输出相乘相加输出三个数。
三个数分别对应正弦波、余弦波、三角波。
在这里插入图片描述

五、温故知新

总结一下:
输入:
CNN网络的输入就是下面数据集的中任意一个波形的100个点:
在这里插入图片描述
每一层的卷积核、偏置、以及全连接的权重和偏置:

每一层的卷积核、偏置是通过类似上面大量的数据集训练出来的,后面给代码,偏置其实就是卷积的结果后面加一个常量,到后面实践就知道了。

输出结果:
因为我们识别的种类为三种,我们训练的时候会给三种波形打上标签①②③,最终人工智障CNN网络就会算出三个结果,三个结果取最大的,该值对应哪个标签,就是识别结果。

六、结果展示

训练时的标签顺序为正弦波、余弦波、三角波,及最终的三个数据结果哪个大就是哪种波形。

1.正弦波识别

100点 信噪比:3.4226的正弦波导入网络
在这里插入图片描述
FPGA计算结果:
在这里插入图片描述
转换为小数:
在这里插入图片描述
Matlab计算结果:
在这里插入图片描述

2.余弦波识别

100点 信噪比:-4.8721的余弦波导入网络
在这里插入图片描述
FPGA计算结果:
在这里插入图片描述
转换为小数:
在这里插入图片描述
Matlab计算结果:
在这里插入图片描述

3.三角波识别

以下100点三角波导入网络
在这里插入图片描述

FPGA计算结果:
在这里插入图片描述
转换为小数:
在这里插入图片描述
Matlab计算结果:
在这里插入图片描述

因为涉及到数据的量化和浮点数转定点数,数据有一定的偏差,但是不会影响最终结果。

图中可以看到,当数据xdata进入FPGA开始到计算完成消耗200多个时钟周期。

七、资源占用情况

因为就想试试他最快能跑多快,所以用了大量的DSP,下一节来说这些DSP都用在了哪里。
在这里插入图片描述
在这里插入图片描述

正在写。。。

★★★如有错误欢迎指导!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190634.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在线学习Java的几个网站,别再盲目学习java了![通俗易懂]

    在线学习Java的几个网站,别再盲目学习java了![通俗易懂]LearnJava在线这是一个非常不错的学习Java的在线网站,纯免费。这是一个个人项目,旨在通过简单有效的在浏览器中进行练习让你快速掌握Java编程语言。通过直接从网络浏览器运行实际代码,你无需在本地安装和执行代码就可以尝试编码,这无疑提高了编程效率和上手效率。你可以根据目录进行练习,有基础部分和高级部分,首先有例子代码,告诉你需要注意的事项以及详细的讲解,旨在把你教会后再让你进行练习。下面就是练习部分,练习部分没有固定在底部边框,可以自由滑动,能够让你编写代码的同时能够查看示例代码详解

    2022年7月7日
    58
  • js获取iframe中的内容(iframe内嵌页面)

    js如何获取包含自己iframe属性a.html如何在b.html里获取包含他的iframe的id在父页面中定义函数,再到子页面中调用。父页面parent.htmlfunctiongetFrameId(f){varframes=document.getElementsByTagName(“iframe”);//获取父页面所有iframefor(i=0;ijs怎样获取ifra…

    2022年4月18日
    1.1K
  • 在ubuntu中pycharm2021.12.13最新激活码-激活码分享

    (在ubuntu中pycharm2021.12.13最新激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~41MD9IQHZL-eyJsaWNlbnNlSWQiOi…

    2022年3月30日
    176
  • Mysql5.7版本中数据表字段可用的类型

    Mysql5.7版本中数据表字段可用的类型

    2022年2月17日
    39
  • SAE J1939 – 简短介绍[通俗易懂]

    SAE J1939 – 简短介绍[通俗易懂]SAEJ1939–简短介绍在商用车辆领域,标准化的,串行的协议用于单个电子控制单元(ECU)和传动系统组件之间的通讯已有一段时间。通过使用标准化的串行协议,可具有以下优势:组件制造商只需要采用一个协议;这主要是商用车辆才会涉及的问题,因为生产量低。商用车辆制造商可依靠不同供应商的组件。可确保组件之间的互操作性,来自不同制造商的组件不用调整就可一同工作。由国际汽车工程师协会…

    2022年5月1日
    52
  • 【spring】AOP实践[通俗易懂]

    【spring】AOP实践[通俗易懂]【spring】AOP实践

    2022年4月25日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号