keras如何获取中间层的输出(Sequential、Functional两种情况下)

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

https://www.jianshu.com/p/9f3a2c9cc786

猜你喜欢

转载自blog.csdn.net/ch206265/article/details/107608423
今日推荐