Chainerで畳み込みニューラルネットワークを試す際の注意点


Chainerを使って畳込みニューラルネットワークを勉強したいと思った時に,「理論はまだわかっていないけどサンプル的なものを動かしてみたい!」
と思うことがあると思われる.

そんな時,このお二方の記事にたどり着くと思います.

PFN発のディープラーニングフレームワークchainerで画像分類をするよ(chainerでニューラルネット1)
http://hi-king.hatenablog.com/entry/2015/06/11/021144

ChainerのNINで自分の画像セットを深層学習させて認識させる
http://d.hatena.ne.jp/shi3z/20150709/1436397615

その際,これらの記事通りにやると引っかかるであろう点を挙げておきます.

ちなみに,GPUを使わず,CPUで試そうとした場合です.

cPickle.UnpicklingError: invalid load key

こちらの記事のとおりです.

mean.npyを非Pickle化して読み込む際にエラーが起きてしまうので,NumPy配列として読み込むようにしてあげれば通ります.

train_imagenet.py
# Prepare dataset
train_list = load_image_list(args.train)
val_list = load_image_list(args.val)
# mean_image = pickle.load(open(args.mean, 'rb'))
mean_image = np.load(args.mean)

しかし,エラーの具体的な原因がわかっていないので要調査です.

remove_split=False is not supported anymore

chainer1.18.0以前のことはわかっていませんが,1.18.0現在では,DotNodeクラスのbuild_computational_graphメソッドの第二引数でremove_splitが常にtrueでなければいけなくなりました.

変更前

train_imagenet.py
with open('graph.dot', 'w') as o:
     o.write(c.build_computational_graph((loss,), False).dump())

変更後

train_imagenet.py
with open('graph.dot', 'w') as o:
     o.write(c.build_computational_graph((loss,)).dump())

デフォルトがtrueなので,282行目のbuild_computational_graphの第二引数を削除しました.

応急処置ですが,これで動きます.
メモ書きとして.

参考

PFN発のディープラーニングフレームワークchainerで画像分類をするよ(chainerでニューラルネット1)
http://hi-king.hatenablog.com/entry/2015/06/11/021144

ChainerのNINで自分の画像セットを深層学習させて認識させる
http://d.hatena.ne.jp/shi3z/20150709/1436397615

Source code for chainer.computational_graph
http://docs.chainer.org/en/stable/_modules/chainer/computational_graph.html

ChainerでcPickle.UnpicklingError
http://qiita.com/shota_hayashi/items/4a488931ab88f45cfa55