【问题标题】:Extracting subgraph in tensorflow在张量流中提取子图
【发布时间】:2017-05-11 19:01:13
【问题描述】:

我有预训练的网络,我试图只获取它的一部分(子图)tf 图以及变量和保护对象。

这就是我的做法:

subgraph = tf.graph_util.extract_sub_graph(default_graph, list of nodes to preserve)
tf.reset_default_graph()
tf.import_graph_def(subgraph)

然而,这会删除所有变量(当我调用 reset_default_graph 时)。即使我明确地将变量的操作节点(仅“变量”类型操作)添加到“要保留的节点列表”中。

如何在保留变量值的同时保留较大图的子图? 是否需要在“保留列表”中添加一些新节点?

我还不清楚图节点和变量之间的关系,教程只是提到创建变量会在图中创建一些操作(节点)。

【问题讨论】:

    标签: machine-learning tensorflow


    【解决方案1】:

    我认为你正在做的事情看起来不错。正如您所说,变量只是一个输出某些值的张量的简单操作(图中的节点)。您应该能够将变量节点添加到列表中以保留它们,就像您已经在做的那样。您可以使用 print(sess.graph_def) 来确保您提供的名称是正确的吗?

    【讨论】:

    • 变量是一组相互关联的操作。通常它由操作组成:“variable[variable]”、“assign[assign]”、“read[identity]”(第一部分是名称,方括号用于类型)和用于初始化程序的整套操作。问题是图形导出以一种不被识别为变量的方式切割变量结构。选择所有必需的操作很麻烦 - 而且不是最聪明的方法。
    • 是的,没错。如果您查看 extract_sub_graph (github.com/tensorflow/tensorflow/blob/master/tensorflow/python/…) 的函数接口,注意到它只是一个简单的函数,没有对变量进行任何智能处理,“选择所有必需的操作”可能仍然是您最好的选择。好消息是,我认为您可以编写一个简单的函数(以 graph_def 作为输入)来自动执行这个选择变量相关节点的繁琐过程。
    • 好的,我希望我可以避免这种情况,也许存在一些使用现有 API 的干净快速的方法。谢谢。
    • 我刚刚遇到了这个函数 convert_variables_to_constants,它可能有助于简化解决方案:github.com/tensorflow/tensorflow/blob/master/tensorflow/python/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多