Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将Keras模型转换为C++;_C++_Tensorflow_Theano_Conv Neural Network_Keras - Fatal编程技术网

C++ 将Keras模型转换为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那样的自包含设备,但您最好的办

我正在使用Keras(和Theano一起)来训练我的CNN模型。有没有人知道我如何在C++应用程序中使用它?有人试过类似的东西吗?我想编写一些python代码,生成一个具有网络功能的C++代码,有什么建议吗?
<>我发现了一个类似的问题,如何在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
github链接上的示例代码、单元测试等。它不是完全完整的,它只支持我使用的CARAS函数的窄子集,但是它应该是一个可以扩展的小努力。

< P>我有类似的需求——我想嵌入CARAS模型在C++应用程序中,并决定写自己的库:

Kerasify的设计目标:

  • 与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库,并将库链接到项目。
如果您想使用与bazel不同的编译器(例如g++),您可以遵循以下伟大的教程:


这里找到的解决方案非常好,但是如果您的模型具有这些库不支持的某些不同类型的层,我建议您执行以下操作:

  • 将Keras模型转换为tensorflow模型
  • 冻结模型并使用tensorflow提供的转换图工具(您必须使用bazel从源代码构建它)
  • 编译C++ API ToSoFraseCub库以在项目中使用它。<李> < L>使用C++ API TysFooFrand库,并将库链接到项目。
如果您想使用与bazel不同的编译器(例如g++),您可以遵循以下伟大的教程:


< P>我发现自己处于类似的情况,但不仅需要支持C++中的顺序KARS模型的前向传递,还需要用.< /P>建立更复杂的模型。 所以我写了一个新的图书馆叫节俭深度。您可以在GitHub上找到它,它是Published