CNN前向传播--C语言实现

该项目主要实现卷积神经网络Lenet-5 的训练(Python+Kreas+Jupyter Notebook)和推理C语言实现(C+Visual Studio2013)
项目特点:① 卷积参数,如输入宽、输入高、输入通道数、输出通道数、卷积核的大小、步幅大小、pad(1是进行补边,0是不补边),激活函数(1是relu,0是softmax)等可调,通用性比较强。②全连接使用卷积运算实现。③池化采用最大池化。④SAME padding。

github地址:GitHub - wei8171023/CNN_C_forword: 使用c语言完成Lenet-5的前向传播过程

工程的实现主要分为两部分:

第一部分是在python训练Lenet-5-MNIST模型
环境:Python+Kreas+Jupyter Notebook
1.Lenet-5网络搭建模型,训练、保存模型。     (train.ipynb)
2.手写字体预测。通过画图工具获得手写字体,并进行模型推理得到预测结果。  (test.ipynb)
3.提取网络模型每一层的参数(权重和bias),保存为.bin文件。   (get_layers_weight.ipynb)
4.提取测试图片在网络每一层中 的输出结果。(便于在后续c语言实现中对比结果,验证程序的正确性)(get_layer_output.ipynb)
5.将图片转为.bin格式,包括图片的宽高大小、通道数和像素值(image2array.py)

第二部分工作是网络前向推理C实现,
环境:C+Visual Studio2013
1.主函数main.cpp,主函数类似于python中模型搭建,在主函数中调用各个层的的函数,完成向前传播的过程。
2.minst.cpp,主要定义了图片和标签结构体、图片读取,权重和偏置读取函数。
3.cnn.cpp,定义了卷积层,池化层,flatten层函数,以便在主函数中调用。
4.根据需要修改网络结构,以及数据存放位置。
5.直接运行就可以了。

所设计的Lenet网络结构如下:

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值