Kerasで中間層の出力結果を得る
中間層の出力結果を得たい場合の方法。
FAQに書いてあることをまとめただけ。
FAQ - Keras Documentation
やり方は2つある。
①新しいモデルの作成
シンプルな方法は,着目しているレイヤーの出力を行うための新しい Model を作成する
# build model from keras.models import Model model = ... # create the original model model.add(Dense(128, name='out1')) model.add(Dense(num_classes, activation='softmax', name='out2')) layer_name = 'out2' intermediate_layer_model = Model(inputs=model.input, outputs=model.get_layer(layer_name).output) intermediate_output = intermediate_layer_model.predict(x_test) print intermediate_output[0]
②Keras functionの定義
ある入力が与えられたときにに,あるレイヤーの出力を返すKeras functionを以下のように記述する
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
など学習時とテスト時でモデルの振る舞いが異なる場合は、learning phase
フラグを利用
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]