keras如何获取中间层的输出
Keras中英文文档中有详细连接,参照:如何获取中间层输出?
Example
构建模型
from keras.models import Model
from keras.layers import Input,Dense,Permute,Flatten
inputs_v = Input(shape=(2,5))
model_v = Permute((2, 1))(inputs_v)
flatten = Flatten()(model_v)
output = Dense(1)(flatten)
model = Model(inputs_v, output)
model.summary()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(x, y, epochs=1, batch_size=2, validation_split=0.1)
取出中间层输出
训练完模型后,取出中间层的输出。
方法一:
permute_layer_model = Model(input=model.input,output=model.get_layer('flatten_6').output)
permute_layer_output = permute_layer_model.predict(x)
print(permute_layer_output)
方法二:
from keras import backend as K
# with a Sequential model
get_2rd_layer_output = K.function([model.layers[0].input], [model.layers[2].output])
permute_layer_output = get_2rd_layer_output([x])[0]
print(permute_layer_output)
注意,如果你的模型在训练和测试两种模式下不完全一致,例如你的模型中含有Dropout层,批规范化(BatchNormalization)层等组件,你需要在函数中传递一个learning_phase的标记,像这样:
from keras import backend as K
# with a Sequential model
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]
参考:
https://blog.csdn.net/xqz_437278616/article/details/97001648