C语言卷积神经网络(无训练,仅用于嵌入式部署)

写在前面

最近正好在做一个基于ZYNQ的人脸识别项目,所以就打算先用PS端做一个C语言的卷积神经网络,结果去网上搜,C语言神经网络的资料有很多,但是好多都不是很好部署,讲解的也不太详细。最后实在没办法,想趁着这个假期没事干,重复造一遍轮子,自己手搓一遍C语言卷积神经网络,也算是加深理解,打发假期时光了。

由于本人是微电子专业,所以代码规范性,代码风格可能比计算机科班出身的同学差很多,也请大家见谅。大家作为参考就好,也非常欢迎计算机专业的同学在我的这个基础上做改进。

我总共编写了3个工程,分别是1)PC端使用malloc动态数组的手写数字识别,2)用于嵌入式设备部署的使用静态数组的手写数字识别,3)以及用于嵌入式设备部署的使用静态数组的人脸识别。这三个工程我都把全部工程上传到gitcode上开源了,供大家参考~

代码开源地址

我把3个工程代码开源在GitCode了,链接在下面,大家自取

GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。icon-default.png?t=N7T8https://gitcode.com/Naruto123456__/C_CNN.git

还有Gitee代码链接:

C语言卷积神经网络_无训练仅用于嵌入式部署: 我自己使用C语言卷积神经网络,注意:无训练仅用于嵌入式部署icon-default.png?t=N7T8https://gitee.com/zhao15947470421/C_CNN.git

上面这个链接我同学测试了一下,可能打不开,我还上传了百度网盘,地址在下面

链接:https://pan.baidu.com/s/1Nb2OU4yLefUBnJ9IZx-G9A?pwd=zh66 
提取码:zh66

代码简介

首先,我先说几点这个代码的注意点:

  1. 本程序的各个神经网络函数以及参数是以pytorch框架作为参考的,所以例如卷积层中的参数in_channels表示输入的数据通道数,参考pytorch函数即可。
  2. 卷积函数Conv和池化函数MaxPool没有padding功能,padding直接设置为0即可
  3. 本程序只做部署推理,没有训练
  4. 所有的权重和偏置以及输入数据均在头文件中
  5. 本程序是在VS2022软件下编写,其他的环境可能各个文件的引用会有问题
  6. 本程序现有历程是一个LeNet-5网络做手写数字识别以及一个aceNet人脸识别
  7. 本程序在VS2022中直接点击调试按钮或者按F5即可运行

压缩包里面只包括了代码,需要自己新建一个VS工程,然后添加这些代码,下面说一下这些文件的作用:

  1. data_define.h是输入的数据以及每一层神经网络大小的定义头文件,
  2. weignt_and_bias_layerx.h就是第x层网络的权重和参数数据头文件,
  3. Conv.c, MaxPool.c这些就是卷积,池化层的c文件,每一个函数都有一个对应的.h头文件,
  4. 主函数就在main.c中,
  5. LeNet.ipynb就是这个网络训练的pytorch代码,
  6. 最后还有4个txt文件就是原始的输入数据。

3b92b9ce7f8a443da91314aad2195c71.png

实例讲解具体使用方法

我感觉还是通过一个具体的实例,一步一步教大家怎么使用这个代码比较好。

步骤1 首先通过pytorch等框架训练好一个神经网络

第一步就是通过pytorch或者tensorflow等框架训练好一个神经网络,然后将神经网络的结构和参数打印出来,就像下面这样:

这里我推荐使用pytorch的一个tor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为人民服务的FinFET

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值