【问题标题】:CNTK Python API: evaluating hidden layers / multiple outputsCNTK Python API:评估隐藏层/多个输出
【发布时间】:2017-04-19 22:19:52
【问题描述】:

在 CNTK Python API 中创建、保存、加载和评估具有多个输出的模型有哪些建议? (我使用的是 CNTK 2.0 RC1)

当我在运行时定义一个网络时,我可以通过将一个小批量字典传递给 eval 函数来轻松评估网络的任何层。

但是,在我保存模型并再次加载后,我只能通过提供输入来评估输出节点(而且我不知道如何在 Python API 中定义多个输出)。我可以使用 find_all_by_name 方法访问任何层,但是当我尝试使用 eval 方法评估隐藏层时,它希望我提供 层的即时输入,而不是相关网络的输入:

ValueError: No value specified for input Variable 'Output('Block1958_Output_0', [#], [1024 x 200])' of Function 'Dense: Output('Block1958_Output_0', [#], [1024
x 200]) -> Output('conversation_vector', [#], [100])'. 

我只找到了有关该主题的以下文档,适用于 Brainscript:https://github.com/Microsoft/CNTK/wiki/CNTK-Evaluate-Hidden-Layers -- 我找不到任何特定于 Python API 的内容。

【问题讨论】:

    标签: python cntk


    【解决方案1】:

    model.outputs[0] 是一个变量,你可以通过 model.outputs[0].owner 或者 as_composite(model.outputs[0].owner) 来访问它的函数,如果 owner 是一个原始函数(其中仅显示直接输入,而复合函数显示映射的根输入变量)

    所以试试这个:

    as_composite(model.outputs[0].owner).eval(...)
    

    【讨论】:

    • 在保存之前使用cntk.combine准备模型的最后一层(根据周在另一篇文章中的建议),然后在加载模型后使用as_composite(model.outputs[0].owner).eval(...)解决了我的问题 - 非常感谢!跨度>
    【解决方案2】:

    得到你想要的所有层之后,你可以使用Combine()创建一个新的Function,然后在新的Function上调用eval。它在 C++ 中工作,虽然我没有在 Python 中尝试过。

    https://www.cntk.ai/pythondocs/cntk.ops.html?highlight=combine#cntk.ops.combine

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多