1. ChainerUI
ChainerUIは、Chainerの実行結果のログからリアルタイムにグラフ表示する公式ツールである。
また、学習用スクリプトに変更が必要だが、スナップショットの任意タイミング取得、学習の即時及び計画停止、並びにハイパーパラメータ(オプティマイザー、学習率、モーメント)の動的変更、が出来る。
(ハイパーパラメーターの変更は現時点ではMomentum SDGしか対応していない)
2019年1月現在において、バージョンは0.8.0であり、今後機能が増える可能性がある。
2. インストール
ChainerUIのインストールの前提条件として、Chainerがインストール済みであることが必要。
$ pip install chainerui
3. 事前準備
ChainerUIを使用するためには、事前準備としてChainerUIのDBを作成する必要がある。
$ chainerui db create
デフォルトで以下の場所に空のデータベースファイルが作成される。
~/.chainerui/db/chainerui.db
データベースにスキーマーを作成する。
$ chainerui db upgrade
以上で事前準備は完了。
なお、作成されたデータベースファイルはsqlite形式なので、sqliteコマンドを使えば直接アクセスが可能である。
データベースは以下のコマンドで削除出来る。
$ chainerui db drop
4. 使用方法(グラフ表示)
ChaienrUIを利用する上での前提として、学習用スクリプトはextensions.LogReportを設定し、result下にlogを出力しておく必要がある。
4.1. グラフ表示
ChainerUIはWebサーバーを立ち上げ、ブラウザ経由でアクセスして利用する。
まずサーバーを立ち上げる。
$ chainerui server -H (IP_ADDRESS) -p (PORT_NUM)
次に、Chainerの実行結果が格納されているディレクトリ(resultディレクトリ)のパスを指定してプロジェクトを作成する。
プロジェクト作成
$ chainerui project create -d (PROJECT_DIR) -n (PROJECT_NAME)
なお、作成したプロジェクトは現時点ではコマンドで削除できない。
ブラウザ上からのみ削除できるが、実際にDELETEボタンを押しても画面が更新されないので削除されたかがわからない。
リロードすると削除されていることが分かる。恐らく意図した挙動でないと思うのでそのうち直されると思う。
ブラウザでサーバーにアクセスするとプロジェクト一覧が表示されるので、結果を閲覧したいプロジェクトを選択すると実行結果が表示される。
グラフはpng形式でダウンロード出来るほか、Pythonのソースコードとしてもダウンロード出来るので加工することが可能。
4.2. スナップショット取得
ChainerUIは実行時に任意のタイミングで取得、もしくは計画的にスナップショットを取る設定を動的に変更することができる。
本機能を利用するには、学習用スクリプトに変更が必要になる。
具体的にはchaineruiをimportし、trainerにCommandsExtension()を追加する必要がある。
import chainerui
from chainerui.extensions import CommandsExtension
〜
trainer.extend(CommandsExtension())
ブラウザ上から、Take snapshotボタンを押すとスナップショットが取得できる。
また、計画的(一定のepoch数もしくはiterate数ごと)に取得するよう動的に指定できる。
4.3. 停止
ChainerUIは実行時に任意のタイミングで学習停止、もしくは計画的に学習を停止することができる。
スナップショット取得同様、学習用スクリプトの変更が必要である。
例えば最初にepoch数1000回で学習を開始したが、あとから300回の時に止める、といった変更が出来る。
ブラウザ上から、Stopボタンを押すと学習が停止する。
また、計画的(一定のepoch数もしくはiterate数の時)に停止するよう動的に指定できる。
が、再開機能はない。
4.4. ハイパーパラメーター調整
ChainerUIには実行時にハイパーパラメーターを変更できる機能があるが、現時点ではMomentum SDGを利用しているときしか利用できない。
(Adamなど他の勾配法を利用している場合は利用できない)
スナップショット取得同様、学習用スクリプトの変更が必要。
ブラウザ上からMomentum SDGを選択し(現状はほかの選択肢はない)、学習率やモーメントの値を動的に変更できる。