TensorFlow 畳込み層のフィルタ/特徴マップの可視化 – CIFAR-10 –
先に MNIST を題材として ConvNet (CNN) モデルの畳込み層のフィルタと出力としての特徴マップを可視化しました(特徴マップを視覚化 – MNIST – / フィルタを視覚化 – MNIST –)。
ついで CIFAR-10 についても同様な視覚化をしてみます。
MNIST 用の単純モデルのままだと精度が上がらないので、CIFAR-10 用に右図のように少しだけ多層化してみました。(畳込み層 + 畳込み層 + プーリング層) x 2 です :
Conv1 -> Conv2 -> MaxPooling2 -> Conv1 -> Conv1 -> MaxPooling2
トレーニング時には Dropout 層も使用しています。また精度よりも可視化を重視するためにフィルタサイズは大きめにして、テスト精度は 80 % 前後まであげてあります。
CIFAR-10
題材はお馴染みの CIFAR-10 です。以下は training samples の最初の 100 個を並べたものです :
CIFAR-10 の詳細は TensorFlow のチュートリアル TensorFlow : Tutorials : 畳込み ニューラルネットワーク を参照してください。
各畳込み層・プーリング層の出力については特に以下の2つのサンプル画像を元にしています。
これらの画像の選択に深い意味はなく、単に各層の出力画像が視認しやすかっただけです :
![]() |
![]() |
フィルタと特徴マップの視覚化
トレーニング後のモデルをベースにフィルタと各層の出力を可視化したものが以下に続く画像です。
* (明るさや輝度を修正してもあまり視認性に影響がなかったので、)画像は加工しないでそのまま表示しています。
* 回転もしていません。
【Conv1 層のフィルタ画像】
見やすくするためにフィルタサイズは 7 x 7 と大きめに取りました :
これだけだと良く分からないので、3チャネルを分解してグレースケール表示したものが以下です。
単純な線分、斜線、円などを処理するフィルタが見て取れますが、各チャネルで相違はあまりないようです。 :
【Conv1 層の出力マップ】
比較的単純なフィルタへの反応が分かりやすいです。
上が馬、下が船の画像に対応していますが、画像が未加工なので回転させていない点に注意してください。
【Conv2 層のフィルタ】
以後は数が多いので、最初の2つのみを表示しています。
【Conv2 層の出力マップ】
【MaxPooling2 層の出力マップ】
【Conv3 層のフィルタ】
【Conv3 層の出力マップ】
【Conv4 層のフィルタ】
【Conv4 層の出力マップ】
【MaxPooling4 層の出力マップ】
以上