为了回答我自己的问题并找到解决方案,我编写了一个简单的c ++解决方案keras2cpp (其代码可在github上找到)。
在此解决方案中,您将存储网络体系结构(在json中)和权重(在hdf5中)。然后,您可以使用提供的脚本将网络转储到纯文本文件。您可以使用纯c ++代码在网络中使用获得的文本文件。 python库或hdf5没有依赖关系。它应该适用于theano和tensorflow后端。
0
为了回答我自己的问题并找到解决方案,我编写了一个简单的c ++解决方案keras2cpp (其代码可在github上找到)。
在此解决方案中,您将存储网络体系结构(在json中)和权重(在hdf5中)。然后,您可以使用提供的脚本将网络转储到纯文本文件。您可以使用纯c ++代码在网络中使用获得的文本文件。 python库或hdf5没有依赖关系。它应该适用于theano和tensorflow后端。
0
我发现自己处于类似情况,但不仅需要支持C ++中顺序Keras模型的前向传递,而且还需要支持使用功能性API构建的更复杂模型的传递。
所以我写了一个叫做节俭型的新库。您可以在GitHub上找到它,并以MIT许可证发布: https : //github.com/Dobiasd/frugally-deep
除了支持许多常见的图层类型外,它还可以保持(有时甚至超过)TensorFlow在单个CPU上的性能。您可以在repo中找到某些常见模型的最新基准测试结果。
通过自动测试,节俭地保证了在C ++中与之一起使用的模型的输出与在Python中与Keras一起运行时的输出完全相同。
0
如果您的keras模型是使用tensorflow后端训练的,则可以按照以下代码将keras模型另存为tensorflow模型: https : //github.com/amir-abdi/keras_to_tensorflow
这是代码的简短版本:
from keras import backend as K
from tensorflow.python.framework import graph_util
from tensorflow.python.framework import graph_io
weight_file_path = 'path to your keras model'
net_model = load_model(weight_file_path)
sess = K.get_session()
constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), 'name of the output tensor')
graph_io.write_graph(constant_graph, 'output_folder_path', 'output.pb', as_text=False)
print('saved the constant graph (ready for inference) at: ', osp.join('output_folder_path', 'output.pb'))
0
我有类似的需求-我想将Keras模型嵌入C ++应用程序中-并决定编写自己的库: Kerasify
Kerasify的设计目标:
github链接上的示例代码,单元测试等。它并不完全完整,仅支持我正在使用的Keras函数的狭窄子集,但应该可以轻松扩展。
0
您可以尝试这个https://github.com/gosha20777/keras2cpp
Keras2cpp是一个小型库,用于从C ++应用程序运行经过训练的Keras模型,而没有任何依赖性。
支持的Keras层:-密集-卷积1D-卷积2D-卷积3D-展平-ELU-激活-MaxPooling2D-嵌入-LocallyConnected1D-LocallyConnected2D-LSTM-GRU-CNN-BatchNormalization
支持的激活:-线性-relu-softplus-tanh-Sigmoid-hard_Sigmoid-elu-softsign-softmax
设计目标:
0
此处找到的解决方案非常好,但是如果您的模型具有这些库不支持的某些不同类型的图层,则建议您执行以下操作:
如果要使用与bazel不同的编译器(例如g ++),则可以遵循以下教程:
http://tuatini.me/building-tensorflow-as-a-standalone-project/
0
最简单的方法可能是对Python脚本进行系统调用,该脚本将预测写入二进制或HDF5文件中,可以从C ++中读取该文件。您还可以将Python直接集成到C ++中 。
如果您需要轻松地部署和分发它,可以考虑使用Anaconda之类的独立Python安装程序,但是最好的选择是避免Keras并使用Caffe或Tensorflow的C ++接口。我不推荐Tensorflow,因为从C ++使用它不是标准的;看到这个讨论 。 Caffe可以说是第二受欢迎的深度学习库,因此您不会错。
0
我正在使用Keras(与Theano)来训练CNN模型。有谁知道如何在C ++应用程序中使用它?有人尝试过类似的东西吗?我有想法写一些python代码,它将生成具有网络功能的c ++代码-对此有何建议?
我在这里找到了类似的问题,如何在C ++中使用Tensorflow Keras模型但没有答案。