C++ 将Keras模型转换为C++;
我正在使用Keras(和Theano一起)来训练我的CNN模型。有没有人知道我如何在C++应用程序中使用它?有人试过类似的东西吗?我想编写一些python代码,生成一个具有网络功能的C++代码,有什么建议吗?C++ 将Keras模型转换为C++;,c++,tensorflow,theano,conv-neural-network,keras,C++,Tensorflow,Theano,Conv Neural Network,Keras,我正在使用Keras(和Theano一起)来训练我的CNN模型。有没有人知道我如何在C++应用程序中使用它?有人试过类似的东西吗?我想编写一些python代码,生成一个具有网络功能的C++代码,有什么建议吗? 我发现了一个类似的问题,如何在C++中使用Tensorflow Keras模型,但没有回答。< P>最简单的方法可能是对Python脚本进行系统调用,该脚本将预测写入二进制或文件,可以从C++读取。你也可以 如果您需要轻松地部署和分发,您可以查看像Python那样的自包含设备,但您最好的办
<>我发现了一个类似的问题,如何在C++中使用Tensorflow Keras模型,但没有回答。< P>最简单的方法可能是对Python脚本进行系统调用,该脚本将预测写入二进制或文件,可以从C++读取。你也可以
如果您需要轻松地部署和分发,您可以查看像Python那样的自包含设备,但您最好的办法是避免使用Keras或使用C++接口或Tensorflow。我不推荐Tensorflow,因为使用C++是不标准的;看见可以说,你不能真的出错。
< P>最简单的方法可能是对Python脚本进行系统调用,该脚本将预测写入二进制或文件,可以从C++读取。你也可以如果您需要轻松地部署和分发,您可以查看像Python那样的自包含设备,但您最好的办法是避免使用Keras或使用C++接口或Tensorflow。我不推荐Tensorflow,因为使用C++是不标准的;看见可以说,你不能真的出错。< /P> < P>回答我自己的问题并有一个解决方案——我写了一个简单的C++解决方案(它的代码在Github上可用)。
在这个解决方案中,您存储网络架构(json)和权重(hdf5)。然后,您可以使用提供的脚本将网络转储到纯文本文件中。您可以使用纯C++代码使用网络获得文本文件。不依赖于python库或hdf5。它应该为TeaNo.TunSoFoSe后端工作。< /P> < P>回答我自己的问题并有一个解决方案——我写了一个简单的C++解决方案(它的代码在Github上可用)。 在这个解决方案中,您存储网络架构(json)和权重(hdf5)。然后,您可以使用提供的脚本将网络转储到纯文本文件中。您可以使用纯C++代码使用网络获得文本文件。不依赖于python库或hdf5。它应该适用于TeaNo.TunSoFoSe后端。< P>我有类似的需求——我想嵌入CARAS模型在C++应用程序中,并决定写自己的库: Kerasify的设计目标:
- 与Keras使用Theano后端生成的图像处理顺序网络的兼容性。(如果切换矩阵列/行顺序,可以使用Tensorflow)
- 没有外部依赖项,标准库,C++11功能正常
- 模型以二进制格式存储在磁盘上,可以快速读取
- 模型以连续块的形式存储在内存中,以提高缓存性能
- 不抛出异常,只在出错时返回bool
- 仅CPU,无GPU
- 与Keras使用Theano后端生成的图像处理顺序网络的兼容性。(如果切换矩阵列/行顺序,可以使用Tensorflow)
- 没有外部依赖项,标准库,C++11功能正常
- 模型以二进制格式存储在磁盘上,可以快速读取
- 模型以连续块的形式存储在内存中,以提高缓存性能
- 不抛出异常,只在出错时返回bool
- 仅CPU,无GPU
github链接上的示例代码、单元测试等。它不是完全完整的,它只支持我正在使用的Keras函数的一小部分,但它应该是可扩展的,只需稍加努力。如果您的Keras模型是使用tensorflow后端培训的,您可以按照以下代码将Keras模型保存为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'))
如果使用tensorflow后端对keras模型进行了培训,则可以按照以下代码将keras模型保存为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'))
这里的解决方案非常好,但是如果您的模型具有这些库不支持的某些不同类型的层,我建议您执行以下操作:
- 将Keras模型转换为tensorflow模型李>
- 冻结模型并使用tensorflow提供的转换图工具(您必须使用bazel从源代码构建它)
- 编译C++ API ToSoFraseCub库以在项目中使用它。<李> < L>使用C++ API TysFooFrand库,并将库链接到项目。
这里找到的解决方案非常好,但是如果您的模型具有这些库不支持的某些不同类型的层,我建议您执行以下操作:
- 将Keras模型转换为tensorflow模型李>
- 冻结模型并使用tensorflow提供的转换图工具(您必须使用bazel从源代码构建它)
- 编译C++ API ToSoFraseCub库以在项目中使用它。<李> < L>使用C++ API TysFooFrand库,并将库链接到项目。
< P>我发现自己处于类似的情况,但不仅需要支持C++中的顺序KARS模型的前向传递,还需要用.< /P>建立更复杂的模型。 所以我写了一个新的图书馆叫节俭深度。您可以在GitHub上找到它,它是Published