2017-10-09 27 views
0

从Python中,我有一个目前在C++环境中使用的冻结的graph.pb。现在输入张量的数据目前在CPU上进行了预处理,但我想在另一个GraphDef中执行此步骤以在GPU上运行它,但似乎无法找到连接两个GraphDef之间的节点的方法。连接不同GraphDef的节点

让我们假设我冻僵图已输入/占位符命名mid,我想用预处理步骤下面连接

tf::GraphDef create_graph_extension() { 
    tf::Scope root = tf::Scope::NewRootScope(); 

    auto a = tf::ops::Const(root.WithOpName("in"), {(float) 23.0, (float) 31.0}); 
    auto b = tf::ops::Identity(root.WithOpName("mid"), a); 

    tf::GraphDef graph; 
    TF_CHECK_OK(root.ToGraphDef(&graph)); 
    return graph; 
} 

我通常使用session->Extend()在同一会话中运行多个图形,但总是确保他们的节点名称是唯一的。使用非唯一节点名称,我希望连接,我得到一个错误

Failed to install graph: 
Invalid argument: GraphDef argument to Extend includes node 'mid', which 
was created by a previous call to Create or Extend in this session. 

P.它似乎至少可以用Python(link

回答

0

您可以使用与Python建议的相同想法来实现您想要的功能 - 将一个GraphDef导入另一个并重新映射输入。

如果你确实使用了C API(其中有stability guarantees),你会想看看:

这些都是在C++ ImportGraphDef功能,您也许能,而不是直接使用(尽管这似乎并不尚未被导出的C++ API的一部分)

希望的基础上实现的那帮助。