機械学習・自然言語処理の勉強メモ

学んだことのメモやまとめ

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]