卷积神经网络的C语言实现

卷积神经网络的C语言实现

代码实现环境是vs2019,po主使用这个代码实现了lenet-5模型的向前传播过程。不过可以通过改变主函数中的参数来实现其他模型。由于作者学艺不精,本代码只能实现卷积步长为1,池化方式只能选择最大池化,激活函数目前只写了Relu。如果小伙伴们有其他需求,可以自己修改代码~~
工程的实现主要分为两部分
第一部分是在python上做的分为以下几个步骤。
1.搭建模型以及训练模型及保存模型。
2.获取图片数据,po主的图片使用手机拍摄的所以要把图片转换为灰度图片,然后下载训练好的模型对图片数据进行预测。获取预测结果保存用来和C实现的预测过程进行对比。
3.获取模型参数,模型参数主要有模型的权重和bias,并把他们保存为.bin文件。
4.将输入图片保存为.bin文件。
5.(可做可不做,因为po主的最后结果不对,所以输出了每一层运算的结果来检查C的每一层输出)
第二部分工作是C实现,工程主要分为以下几个部分:
1.主函数,主函数类似于python中模型搭建,在主函数中调用各个层的的函数,完成向前传播的过程。
2.cnn.c,定义了输出层,卷积层,池化层,flatten层,全连接层和输出层的函数,以便在主函数中调用。
3.mat.c,卷积运算的实现。
注:在获取模型权重参数时,需要下载HDFView这个软件来获取各个层的名字

how to use
python下
1.在python环境下训练模型,并保存模型(python->model_train.py)
2.模型预测,获取模型预测的结果(python->model_predict.py)
3.获取模型各层权重参数(python->get_model_weight)
4.将图片转为.bin格式(python->image_to_array.py)
5.获取模型各层结果(get_layers_results.py)
C下:
1.根据需要修改网络结构,以及数据存放位置。
2.直接运行就可以了
附上代码的链接:https://github.com/lihui600/CNN-use-C-achieve.git
本文参考了Github代码,附代码链接: git clone https://github.com/Lucas-Wye/Face-Recognition-of-DeepID_Forward_Use_C.git

链接: link.

你可能感兴趣的:(卷积神经网络的C语言实现)