共计 883 个字符,预计需要花费 3 分钟才能阅读完成。
最近使用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]的输出了
正文完
请博主喝杯咖啡吧!