覚え書きブログ

Deep Learning覚え書き(Caffenetの可視化編)

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()

f:id:hirotaka_hachiya:20150215205854p:plain

次に、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()

f:id:hirotaka_hachiya:20150219183127p:plain

次に、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()

f:id:hirotaka_hachiya:20150219185432p:plain

上記の可視化のpythonコードは、以下からダウンロードできる。
https://drive.google.com/open?id=0B3uB4w2FEJbIbTIweEU2S2txWW8