CaffenetによるIrish terrier(アイリッシュ・テリア)の分類時の各層の特徴マップを可視化してみた。
まず、http://nbviewer.ipython.org/github/everpeace/caffe/blob/master/examples/cifar10_full.ipynbを参考にし、関数plot_imagesを次のように定義する。
def plot_images(images, tile_shape): assert images.shape[0] <= (tile_shape[0]* tile_shape[1]) from mpl_toolkits.axes_grid1 import ImageGrid fig = plt.figure() grid = ImageGrid(fig, 111, nrows_ncols = tile_shape ) for i in range(images.shape[0]): grd = grid[i] grd.imshow(images[i])
そして、convolution第1層(kernel_size:11, stride:4)の特徴マップ(96枚、大きさ:55x55)を下記のように確認し、plot_imagesを用いて可視化した。
>>>net.blobs['conv1'].data[0].shape (96, 55, 55) >>>plot_images(net.blobs['conv1'].data[0],tile_shape=(6,16)) >>>plt.show()
次に、pooling第1層(max pooling, kernel_size:3, stride:2)の特徴マップ(96枚、大きさ:27x27)を下記のように確認し、plot_imagesを用いて可視化した。
>>>plot_images(net.blobs['pool1'].data[0],tile_shape=(6,16)) >>>plt.show()
次に、normalization第1層(local response normalization, local_size:5, alpha=0.0001, beta=0.75)の特徴マップ(96枚、大きさ:27x27を下記のように確認し、plot_imagesを用いて可視化した。
>>>plot_images(net.blobs['norm1'].data[0],tile_shape=(6,16)) >>>plt.show()
上記の可視化のpythonコードは、以下からダウンロードできる。
https://drive.google.com/open?id=0B3uB4w2FEJbIbTIweEU2S2txWW8