Pynote

Python、機械学習、画像処理について

Deep Learning - CNN のモデル構造を可視化できる ConvNet Drawer を使ってみた

導入方法

ConvNet Drawer のレポジトリを clone する。

git clone https://github.com/yu4u/convnet-drawer.git

使い方

PYTHONPATH に追加する。

まず clone した convnet-drawer ディレクトリのパスを sys.path に追加する。

import sys
# clone した convnet-drawer ディレクトリのパスを追加する。
sys.path.append('convnet-drawer')

モデルを作成する。

Keras ライクな API でモデルを作成する。
モデルは分岐がなく、入力から出力まで一本道の sequential モデルでなければならない。
以下は AlexNet の例である。

from convnet_drawer import Model, Conv2D, MaxPooling2D, Flatten, Dense

model = Model(input_shape=(227, 227, 3))
model.add(Conv2D(96, (11, 11), (4, 4)))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(Conv2D(256, (5, 5), padding="same"))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(Conv2D(384, (3, 3), padding="same"))
model.add(Conv2D(384, (3, 3), padding="same"))
model.add(Conv2D(256, (3, 3), padding="same"))
model.add(MaxPooling2D((3, 3), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(4096))
model.add(Dense(4096))
model.add(Dense(1000))

保存する。

save_fig() で SVG 形式で保存する。

model.save_fig('alexnet.svg')


対応している層

畳み込み層

Conv2D(filters=None, kernel_size=None, strides=(1, 1), padding="valid")

プーリング層

MaxPooling2D(pool_size=(2, 2), strides=None, padding="valid")
AveragePooling2D(pool_size=(2, 2), strides=None, padding="valid")
GlobalAveragePooling2D()

Flatten 層

Flatten()

全結合層

Dense(units)

描画に関するパラメータ

convnet-drawer の config.py で描画に関するパラメータを設定できる。
パラメータの意味は GitHub に記載されている以下の図を参照されたい。