• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

keras任意中间层结果输出

bigdata admin 1个月前 (09-22) 130次浏览 0个评论 扫描二维码

最近使用 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]的输出了


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明keras 任意中间层结果输出
喜欢 (0)
admin
关于作者:

您必须 登录 才能发表评论!