| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 如何在STM32上部署卷积神经网络(纯C语言搭建) -> 正文阅读 |
|
[嵌入式]如何在STM32上部署卷积神经网络(纯C语言搭建) |
0、前言本文是什么 假如你已经使用PyTorch或者TensorFlow训练了一个卷积神经网络,得到了各层参数,却希望用 本文虽然主要介绍怎么搭建 本文不是什么 1、研究对象顾名思义,可以把卷积神经网络理解为加了“卷积”操作的深度学习网络。 上面这张图是论文
中的网络的结构图。这个网络名为 2、卷积神经网络的组成再复杂的对象都有组成元素,论文里的那张图就至少可以分成两部分——数据和操作。下图中我用黑色箭头标出来灰色方块就是数据,而连接灰色方块的那些线则代表某种操作。 这样, 注意哈,原文的输出是高斯连接( 3、确定任务我们已经知道,神经网络里面有卷积、池化、全连接等处理方法。但并不是只有这些操作的。 拉直 看上面这张图,红线圈中的部分有些特殊。16个矩阵形的数据经过这一层处理以后变成了长度为120的向量,这显然是和后面的两个全连接层不同的。 事实上,这一层在做全连接之前,是把输入的矩阵“拉直”成向量了的。 那么,后面的那两个全连接层怎么办呢?答案当然是不用再做拉直处理了呀,直接跟向量叉乘,跟有多少个向量叉乘,输出的那个向量的长度就有多长。 而那些向量的值,就是通过训练得到的参数。 激活函数 这样,我们就明确任务了,至少要编写这么几个处理函数:
4、组件介绍要用C语言实现上述的那些处理方法,需要做哪些准备呢?我们直接看看头文件吧。 4.1 矩阵操作(matoperation) 然后是两个二维矩阵相关的操作,矩阵最大值坐标
4.2 CNN算子(cnnoperation)
4.3 网络搭建
这个网络使用
下图为 不要看着图片这么长就觉得很复杂,其实主要是做了动态分配的代码比较占位置,咱们可以拿第一层卷积层来看看。 就这几行
其他层的处理都是类似的。 5、训练参数的使用搭建网络是为了部署训练好的网络,那么怎么把训练得到的参数导入这个C语言搭起来的网络里呢? 前面不是为 训练得到的参数也就两种,一种是卷积层的卷积核里面的值,另一种是全连接层的那些和拉直处理后的输入做叉乘的向量的值(权重),以及偏差( 6、源代码为了方便大伙参考,我把源代码放到 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:19:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |