在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的内容。
答案 0 :(得分:1)
model.outputs [0]是一个变量,如果所有者是原始函数,你可以通过model.outputs [0] .owner或as_composite(model.outputs [0] .owner)转到它的函数。仅显示直接输入,而复合函数显示用于映射的根输入变量
所以试试这个:
as_composite(model.outputs[0].owner).eval(...)
答案 1 :(得分:0)
获取所需的所有图层后,可以使用Combine()创建新函数,然后在新函数上调用eval。它适用于C ++,但我还没有在Python中尝试过。
https://www.cntk.ai/pythondocs/cntk.ops.html?highlight=combine#cntk.ops.combine