1. 程式人生 > >Keras框架下輸出模型中間結果

Keras框架下輸出模型中間結果

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]