Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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
Python 如何从给定的模型中获取Graph(或GraphDef)?_Python_C++_Tensorflow_Keras_Model - Fatal编程技术网

Python 如何从给定的模型中获取Graph(或GraphDef)?

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

我有一个使用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().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他应该做同样的事情。