Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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> < P>回答我自己的问题并有一个解决方案——我写了一个简单的C++解决方案(它的代码在Github上可用)。 在这个解决方案中,您存储网络架构(json)和权重(hdf5)。然后,您可以使用提供的脚本将网络转储到纯文本文件中。您可以使用纯C++代码使用网络获得文本文件。不依赖于python库或hdf5。它应该适用于TeaNo.TunSoFoSe后端。

< 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'))

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

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


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

除了支持许多常见的层类型外,它还可以在单个CPU上跟上(有时甚至超过)TensorFlow的性能。您可以在中找到一些常见模型的最新基准测试结果

<> P.>通过深度自动测试保证C++中使用的模型的输出与Python中的Keras的输出完全相同。

< P>你可以试试这个

KARAS2CPP是一个小型的库,用于从C++应用程序中运行训练过的KARAS模型,不依赖任何关系。 支持的Keras层: -浓密 -卷积1d -卷积2D -卷积3D -压扁 -埃卢 -活化 -MaxPoolig2D -嵌入 -本地连接1D -本地连接2D -LSTM -格鲁 -有线电视新闻网 -批处理规范化

支持的激活: -线性的 -雷卢 -softplus -谭 -乙状结肠 -硬乙状结肠 -埃卢 -软设计 -softmax

设计目标:

  • 与Keras使用TensorFlow后端生成的网络的兼容性
  • 仅限CPU
  • 没有外部依赖项,标准库,C++17
  • 模型存储在内存中

@akarsakov您需要什么详细信息?@1''抱歉,我选择了错误的悬赏理由。我想找到更直接或更适合生产方式使用CARAS模型在C++代码中。@ Akasakof任何错误的HDF5+系统调用解决方案?@ 1’很难分发这样的解决方案。我们需要使用Keras等部署所有python环境。@akarsakov看到了我编辑的答案。抱歉,没有意识到您想要部署一个已经训练过的模型。在这种情况下,这是一个很好的解决方案。小补充:Bazel不是编译器,它是一个构建工具(可以使用类似g++的编译器,但不能替换它)。很好,编辑了答案。您的库是否支持使用
tensorflow.keras
?@off99555对模型进行训练的推断?是的欢迎来到堆栈溢出!虽然我们感谢您提供答案的意图,但请确保问题首先针对网站。这是对非现场资源的请求,因此不应回答。您好,欢迎使用堆栈溢出。看起来您正在链接到自己的GitHub库。你需要适当地披露这一事实,因为如果你不这样做,你的答案可能会被删除。请花点时间阅读