(著)山たー
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が最大となっており、これは正解である。
コメントをお書きください