chainer GUI designerを使ってchainerのコードを生成してみる
皆さんこんばんは。Chainer Advent Calender 2017の9日目の記事です。
(Advent Calendarに不慣れで、空の記事を公開していました、すいません、)
今回の記事は拙作のGUIクライアント(非公式)でネットを構築してchainerのコードを生成してみようというのが趣旨です。
GitHub - fukatani/ChainerWing: GUI deep learning IDE based on chainer.
ChainerWing自体はデータのハンドリングから、ネット構築、学習、予測まで(限られたタスクではありますが)、サポートされています。
今回はネット構築機能を使ってChainerのコードを生成してみます。
フル機能に興味がある方は、以前の記事を参考にしてください。
本題に入る前にChainerWingについて少しだけ紹介させてください。
開発のきっかけと狙い
データセットの準備から、結果の可視化までできるディープラーニング専用のIDEみたいなものがあると便利なんじゃないか?というのが開発のきっかけです。
特に以下の四つの工程をGUIで開発者に楽をさせることを目標としています。
1. ネットの構築
TensorBoardにしてもchainerのグラフダンプ機能にしてもコードで書いて、ネットを可視化して確認する、ということをしています。
しかし、常々これは逆なのではないか、つまりGUI上でグラフを書き、コードが生成されるべきなのではないか?と思っていました。
2. Chainerコードの生成
開発者はネットを構築して学習曲線をして終わりではなく、コードを他のなにかに組み込むはず。
GUI上で予測を行えるだけではデプロイがやりづらいので、Chainerコードを生成して他のアプリに組み込みやすくしています。
内部では生成したコードをimportlibを使って動的にimportして学習を実行しています。
3. データセットの準備
なんだかんだいって、ディープラーニングを始めるうえで大変なのが、データセットの加工。
例えば入力数値のスケーリングや、トレーニングセットとテストセットの分割、画像データのオーグメンテーションなど。
また、正解値はラベルファイルを用意するのではなく、ディレクトリごとに各カテゴリの画像を入れる形にしています。
4. デバッグ
実行時にエラーが発生したノードが赤くなり、問題がどのノードかわかるようになっています。
準備(インストール)
Python3.5のインストール
Floppyが3.5で書かれている、というのが事情です。
生成コードはPython2.7でもPython3.4でも動きます。
chainerのインストール
わかりやすかったので、chainer advent calendar 2017の記事を引用してみます。
PyQt5のインストール
pip install pyqt5
ChainerWingのインストール
git clone https://github.com/fukatani/ChainerWing.git
python setup.py install
実践編、Alexnetを作ってみよう
Taskによって、Funtionとレイヤが制限されています。Alexnetは画像分類用のネットワークなので、Train Configurationアイコンをクリックして、タスクをImage Classificationに切り替えます。
今回はAlexnetを作ってみます。
(画像はChainerで各種CNNの実装からいただきました)
FunctionやLinkを作るためには、右のリストからドラッグオンドロップします。
見つからない時は検索窓に文字を打つと絞り込まれます。ネットの出力と入力をマウスでつなげます。
各パラメータはクリックしたあとにキーボードで数字や、文字を打つと設定できます。
LinkとFunctionには名前をつけられます。各オブジェクト上で右クリックしてRename を選択してください。
この名前は生成コードでも使われるので、わかりやすい名前にしておきます。
出来上がったネットがこちら。
Compileボタンを押すと、Chainerコードが出力されます。(出力位置はTrain Configuration画面で設定可能。Working Dirに出力される。)
出来上がったコードがこちら。
うんまあ、ちゃんとAlexしてます。(__init__の引数の順番がデタラメだからソートしてえ
今後
とりあえず、自分で使ってみて、不便なところは直したい、
あとチンタラ開発している間に当初やりたかったことがガッツリsonyさんのNeural Network Consoleと被ったので思案中。
同じようなことやってもしかたないし。
・サポートするリンク、ファンクションの拡大。増やすのは簡単なのでお気軽にPRどぞ。
・Task増やす(物体検出かGANやりたい)
・既存のchanerプロジェクトを取り込めるようにしたいです。