keras任意中间层结果输出

3,646次阅读
没有评论

keras任意中间层结果输出

最近使用keras写了一点代码,输入是正负样本,loss使用的是交叉熵,但是最终我只需要网络对给定的样本的预测分数就可以了,也就是输入只有一个样本,不存在正负样本对的情况。

如果你的模型就一个输入一个输出,那么通过以下的方式你可以拿到你想要的输出

from keras import backend as K

# with a Sequential model
get_3rd_layer_output = K.function([model.layers[0].input],
                                  [model.layers[3].output])
layer_output = get_3rd_layer_output([X])[0]

 

在网络中你经常会使用到dropout以防过拟合,那么你可以通过下面的方法

get_3rd_layer_output = K.function([model.layers[0].input, K.learning_phase()],
                                  [model.layers[3].output])

# output in test mode = 0
layer_output = get_3rd_layer_output([X, 0])[0]

# output in train mode = 1
layer_output = get_3rd_layer_output([X, 1])[0]

上面的这些答案你都可以在官方的FAQ里面找到答案,这里也是搬运工搬运过来的,但是到这里还是没有解决文章一开始遇到的问题,这里就需要参考 keras 函数式api文档

主要使用的函数是  get_output_at

现在的网络输入是有个两个样本的,输出层(Dense(1))其实输出是有两个结果的,那么你需要使用get_output_at获取其中的一个结果 ,其中参数node_index 就是节点索引

比如

backend.function([model.layers[0].input,model.layers[1].input],
                                          [model.layers[3].get_output_at(0)])

通过上述方式就可以获取到layer[0]输入层对应的layer[3]的输出了

admin
版权声明:本站原创文章,由admin2018-09-22发表,共计883字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)