在C++中调用keras模型进行预测

系统:ubuntu18.04
显卡+驱动:Nvidia TITAN Xp + CUDA 11.2 + cuDNN 8.2.132
环境搭建:python 3.8.10 + tensorflow-gpu 2.5.0 + keras-nightly 2.5.0 + keras-preprocessing 1.1.2

项目地址:https://github.com/Dobiasd/frugally-deep
常见问题和使用方法:https://github.com/Dobiasd/frugally-deep/blob/master/FAQ.md
frugally-deep对tensorflow和keras的版本有要求,可参考项目中要求的版本,本文所有环境仅供参考。

1. frugally-deep安装

参考项目INSTALL.md下载安装:

git clone -b 'v0.2.16-p0' --single-branch --depth 1 https://github.com/Dobiasd/FunctionalPlus
cd FunctionalPlus
mkdir -p build && cd build
cmake ..
make && sudo make install
cd ../..

git clone -b '3.3.9' --single-branch --depth 1 https://gitlab.com/libeigen/eigen.git
cd eigen
mkdir -p build && cd build
cmake ..
make && sudo make install
sudo ln -s /usr/local/include/eigen3/Eigen /usr/local/include/Eigen
cd ../..

git clone -b 'v3.9.1' --single-branch --depth 1 https://github.com/nlohmann/json
cd json
mkdir -p build && cd build
cmake -DBUILD_TESTING=OFF ..
make && sudo make install
cd ../..

git clone https://github.com/Dobiasd/frugally-deep
cd frugally-deep
mkdir -p build && cd build
cmake ..
make && sudo make install
cd ../..

注意:在FunctionalPlus的cmake …之后会产生cmake文件,然后make && sudo make install 命令可能会报错,显示A.cmake某处出错,B.cmake不存在。这是因为A.cmake寻找B.cmake的目录为A.cmake所在目录,返回cmake …操作终端输出的界面,会发现B.cmake在另外一个目录中,大概形式为"/usr/local/lib/FunctionalPlus/lib"(大概如此,我记不清了),将这个文件复制粘贴到A.cmake的目录中就可以了。

2. 保存keras模型

参考项目中Usage部分,训练好后的模型保存为h5格式:

model.save('keras_model.h5', include_optimizer=False)

如果当时只保存了权重的话,可以重新搭建网络结构,然后model.load_weights()后再保存整个模型(结构+权重)

3. 转换h5格式模型为json格式模型

将.h5文件放在frugally-deep文件夹中,调用如下命令就会产生一个fdeep_model.json的文件,就可以在c++模型中通过读取json文件进行网络预测。

python3 keras_export/convert_model.py keras_model.h5 fdeep_model.json

4. 网络的输入与输出处理

待补充

参考资料:
https://github.com/Dobiasd/frugally-deep#usage
https://blog.csdn.net/weixin_39569242/article/details/120066858
https://blog.csdn.net/qq_40622955/article/details/109287083

你可能感兴趣的:(keras,c++)