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> < 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库,并将库链接到项目。
< 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
- 模型存储在内存中
tensorflow.keras
?@off99555对模型进行训练的推断?是的欢迎来到堆栈溢出!虽然我们感谢您提供答案的意图,但请确保问题首先针对网站。这是对非现场资源的请求,因此不应回答。您好,欢迎使用堆栈溢出。看起来您正在链接到自己的GitHub库。你需要适当地披露这一事实,因为如果你不这样做,你的答案可能会被删除。请花点时间阅读