如何在CNTK模型中访问未命名的节点

时间:2017-10-31 15:42:44

标签: cntk

假设我使用以下代码创建模型(简化)但不要命名任何节点:

num_classes = 10
input_var = cntk.input_variable((12,))

model = Sequential([
    Dense(256),
    Dense(512),
    Dense(num_classes)
])(input_var)

如果我想稍后评估中间节点,我该如何访问它们?

我已经

cntk.logging.get_node_outputs(model)

检查图表并获得以下输出:

[Output('Block30733_Output_0', [#], [10]),
 Output('Block30719_Output_0', [#], [512]),
 Output('Block30705_Output_0', [#], [256])]

但是,使用这些名称调用model.find_by_name()将返回None。

1 个答案:

答案 0 :(得分:2)

一种方法是进行图搜索。您需要找到一种方法来区分要评估的图层。你可以得到这样的所有节点。

    blocks = C.logging.graph.depth_first_search(
            model, (lambda x : type(x) == C.Function and x.is_block) , depth = 0)

对于lambda,您可以添加任何条件。要获得所有块,您可以使用:

lambda x: True