【问题标题】:Tensorflow: What are the "output_node_names" for freeze_graph.py in the model_with_buckets model?Tensorflow:model_with_buckets 模型中 freeze_graph.py 的“output_node_names”是什么?
【发布时间】:2016-08-15 16:05:28
【问题描述】:

我用seq2seq = tf.nn.seq2seq.embedding_attention_seq2seq 训练了一个tf.nn.seq2seq.model_with_buckets,与Tensorflow Tutorial 中的示例非常相似。

现在我想使用freeze_graph.py 冻结图表。如何在我的模型中找到“output_node_names”?

【问题讨论】:

    标签: tensorflow recurrent-neural-network


    【解决方案1】:

    您可以通过以下方式获取模型中的所有节点名称:

    node_names = [node.name for node in tf.get_default_graph().as_graph_def().node]
    

    或者恢复图形:

    saver = tf.train.import_meta_graph(/path/to/meta/graph)
    sess = tf.Session()
    saver.restore(sess, /path/to/checkpoints)
    graph = sess.graph
    print([node.name for node in graph.as_graph_def().node])
    

    您可能需要过滤这些以仅获取您的输出节点,或仅获取您想要的节点,但这至少可以帮助您获取您已经训练过且无法使用 @987654323 重新训练的图的名称@为每个节点定义。

    理想情况下,您希望为以后要访问的每个操作或张量定义一个name 参数。

    【讨论】:

    • 对,在 seq2seq 模型中有数千个。它们依赖于存储桶。
    • 这会产生图中的每个节点名称,不一定是输出。
    • 那里有一个错字(resore 应该是restore)。我尝试编辑,但编辑需要更改至少 6 个字符...有人知道为什么吗?
    • +将 tf.get_default_graph 更改为 tf.get_default_graph() (奇怪的是编辑应该是程序的 6 字符规则
    【解决方案2】:

    您可以通过将可选的 name="myname" 参数传递给几乎所有构建节点的 Tensorflow 运算符来为模型中的节点选择名称。如果您不指定图形节点,Tensorflow 将自动选择它们的名称,但如果您想通过 freeze_graph.py 之类的工具识别这些节点,那么最好自己选择名称。这些名称就是您传递给 output_node_names 的名称。

    【讨论】:

    • 谢谢,我想我现在已经掌握了基本概念,但我仍然在为 model_with_buckets 苦苦挣扎……我有 4 个桶,每个桶都有一个 RNN,然后是 embedding_attention_decoder,然后是 sequence_loss,每个桶包括几个细胞,我可以给他们所有的名字。但是我看不到一个可以传递给“output_node_names”的输出节点。我是否需要在 seq2seq.py 代码的代码中添加最终节点?我是有一个“output_node_names”的输出节点还是四个?
    • 传递哪些节点取决于您要计算的内容。例如,对于推理图,您通常只使用表示模型输出的一个节点。基本上 --- 您应该在运行图形时使用要传递给 session.run() 的节点。 (您不需要命名图表中的所有内容,只需命名您想知道其值的一两个节点即可。)
    • 目前还不清楚如何冻结这个特定的 seq2seq 图
    • 你能更具体地说明在哪里传递这个参数吗?它是train.py 脚本的参数吗?如何指定要命名的节点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多