Keras框架下輸出模型中間結果
阿新 • • 發佈:2019-01-14
Keras因其簡潔便用被越來越多的調參工程師接受了,它具有高可讀性的優勢,緣於它本身對程式碼的模組化封裝。高度模組化封裝之後,很多細粒度操作就變得比較困難了,要不停地閱讀它的技術document。
如果對基於keras所搭建的模型的中間計算結果進行讀取,中文技術文件上提供了兩種方法,經過測試,兩種方法均可以使用。
文件連結如下:https://keras-cn.readthedocs.io/en/latest/for_beginners/FAQ/#intermediate_layer
方法1:重新構建一個模型
from keras import backend as K
model = load_model('xxx.h5')
layer_name = 'xx'
mid_model = Model(input=model.input,
output=model.get_layer(layer_name).output)
mid_ouput = mid_model.predict(x)[0]
重新構建一個模型,類似於輸出從中間截斷。
方法2:用函式得到
from keras import backend as K
mid_layer = K.function( [model.layers[0].input],
[model.layers[-2].output])
mid_layer_output = mid_layer([X])[0]
用backend中的function來獲得,我的keras的後端是tensorflow,這個做法就等於直接用tf來獲得中間層輸出。
以上是對文件使用方法的一個解釋。真正在專案可以封裝成一個函式,以下給出了一個demo樣式:(由木盞本人編寫)
def get_layer_output(model, x, index=-1):
"""
get the computing result output of any layer you want, default the last layer.
:param model: primary model
:param x: input of primary model( x of model.predict([x])[0])
:param index: index of target layer, i.e., layer[23]
:return: result
"""
layer = K.function([model.input], [model.layers[index].output])
return layer([x])[0]