· 

Kerasにおける中間層の出力の可視化

(著)山たー

Kerasで中間層の出力を見る方法。今回、自分は実装していません。先人に感謝。

KerasのFAQ

やりたいこと自体はKeras FAQ: Kerasに関するよくある質問の『中間レイヤーの出力を得るには?』にすでに書いてある。

出力したい中間層のモデルを新しく作成する方法

from keras.models import Model

#元のmodelを作成
model = ...  # create the original model

#見たい中間層の名前
layer_name = 'my_layer'

#中間層のmodelを作成
intermediate_layer_model = Model(inputs=model.input,
                                 outputs=model.get_layer(layer_name).output)
#出力をmodel.predictで見る
intermediate_output = intermediate_layer_model.predict(data)

Kerasの関数を新しく作る方法

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]

Activation Maps Visualisation for Keras

実装しようかと思ったが、時間が無かったのでGithubで実装が無いか探すと、

https://github.com/philipperemy/keras-visualize-activations

というレポジトリがあった。もうこれ使おう。結局、今回はこれを使ってみた報告をするだけ。

 

まず、

pip install natsort

をしておく。これはソートのためのライブラリ。次にmodel_train.pyを実行する。

 

モデルは

 

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 24, 24, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 12, 12, 64)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 12, 12, 64)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 9216)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 128)               1179776   
_________________________________________________________________
dropout_2 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 10)                1290      
=================================================================
Total params: 1,199,882
Trainable params: 1,199,882
Non-trainable params: 0

となっている。デフォルトではMNISTのランダムな7

を入力として、各層のニューロン活性が視覚化できる。

 

視覚化した活性マップ

第0層(入力層)

第1層

第2層

第3層

第4層

第5層

第6層

第7層(出力層)

softmaxの出力は、7が最大となっており、これは正解である。