我正在使用CNTK的python API来训练我使用save_model函数保存的CNN。
现在我想在我的网络上运行一些分析。具体来说,我想看一下每一层的激活情况。显然我可以在一些名为img的数据上运行我的网络,如下所示:
model.eval(img)
但这只会给我网络中最后图层的输出。有没有一些简单的方法来获得前面图层的输出?
答案 0 :(得分:0)
实际上,甚至为该任务提供了一个示例:https://github.com/Microsoft/CNTK/tree/master/Examples/Image/FeatureExtraction
让我简要介绍一下基本步骤:
重要的是您要获取输出的节点的名称。
# get the node in the graph of which you desire the output
node_in_graph = loaded_model.find_by_name(node_name)
output_nodes = combine([node_in_graph.owner])
# evaluate the node e.g. using a minibatch_source
mb = minibatch_source.next_minibatch(1)
output = output_nodes.eval(mb[features_si])
# access the values as a one dimensional vector
out_values = output[0].flatten()
desired_output = out_values[np.newaxis]
基本上你就像你做的一样,不同的是你检索一个中间节点。