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