Python 如何从给定的模型中获取Graph(或GraphDef)?
我有一个使用Tensorflow 2和Keras定义的大模型。 该模型在Python中运行良好。现在,我想把它导入到C++项目中。Python 如何从给定的模型中获取Graph(或GraphDef)?,python,c++,tensorflow,keras,model,Python,C++,Tensorflow,Keras,Model,我有一个使用Tensorflow 2和Keras定义的大模型。 该模型在Python中运行良好。现在,我想把它导入到C++项目中。 我的C++项目中,我使用了代码> tfl图形输入Def>代码>函数。 如果我使用以下代码准备*.pb文件,它会工作得很好: with open('load_model.pb', 'wb') as f: f.write(tf.compat.v1.get_default_graph().as_graph_def().SerializeToStri
我的C++项目中,我使用了<>代码> tfl图形输入Def>代码>函数。 如果我使用以下代码准备
*.pb
文件,它会工作得很好:
with open('load_model.pb', 'wb') as f:
f.write(tf.compat.v1.get_default_graph().as_graph_def().SerializeToString())
我已经在使用Tensorflow 1(使用tf.compat.v1.*函数)编写的简单网络上尝试了这段代码。它工作得很好
现在我想导出我的大模型(在开始时提到,使用TysFROUM 2)到C++项目中。为此,我需要从模型中获取一个
Graph
或GraphDef
对象。问题是:如何做到这一点?我没有找到任何属性或函数来获取它
我还尝试使用
tf.saved\u model.save(model,'model')
保存整个模型。它生成一个包含不同文件的目录,包括保存的\u model.pb
文件。不幸的是,当我试图用C++来加载这个文件时,使用了<代码> Tfl CopyIngPotoDeF>代码>函数,程序抛出了一个异常。 < P>由不生成消息而生成的协议缓冲文件,但A。您可以在其中获得嵌入的图形,但这不会立即作为冻结图形工作,因此要正确获得它可能很困难。而不是这样,C++ API现在包括一个允许从目录加载整个保存模型的调用。应该是这样的:
#包括
#include//添加必要的TF include指令
使用名称空间std;
使用名称空间tensorflow;
int main()
{
//保存的模型目录的路径
常量字符串导出_dir=“…”;
//负荷模型
地位;
保存的模型绑定包;
会话选项会话选项;
运行选项运行选项;
s=LoadSavedModel(会话选项、运行选项、导出目录、,
//tf.saved\u model.save设置的默认“serve”标记
{“服务”},&bundle));
如果(!.ok())
{
cerr我找到了这个问题的以下解决方案:
g = tf.Graph()
with g.as_default():
# Create model
inputs = tf.keras.Input(...)
x = tf.keras.layers.Conv2D(1, (1,1), padding='same')(inputs)
# Done creating model
# Optionally get graph operations
ops = g.get_operations()
for op in ops:
print(op.name, op.type)
# Save graph
tf.io.write_graph(g.as_graph_def(), 'path', 'filename.pb', as_text=False)
谢谢您提供的详细答案。我已经尝试过LoadSavedModel。不幸的是,安装包中提供的include文件中没有这样的声明:。我想在提供的库中也没有这样的函数。@IvanBychkov啊,所以如果您使用的是C API,是的,该函数本身不存在,但是您有,w他应该做同样的事情。