Neural Network Consoleで作成した学習済モデルをNNablaで実行する方法

こんにちは。管理人のピヨ猫でーす。

以前記事にした通りNeural Network Consoleは学習済モデルを作成するための開発環境であり、実行環境ではありません。実行はNNablaが動くサーバー上で行います。
今回はNeural Network Consoleで作成した学習済モデルをNNablaで動かす方法を紹介します。

1.方針(Neural Network Consoleがやっていることと同じことをする)

どうやって動かそうかと考えたところ、Neural Network Consoleがやっていることと同じことをすれば良いと思いまして、今回はNeural Network Consoleでやっていることを調べて、それをNNabla上で手動で動かすという方法で、学習済モデルをNNabla上で動かすことを実現しようと思います。

なお、初めにお断りしておくと、たぶん、ここで紹介するやり方よりもエレガントな方法があると思います。ただ、NNablaを触って日が浅く正直まだあまり理解していないので、まずは、一番?シンプルな方法を取ろうと思います。

2.Neural Network Console学習済モデルを動かしている方法を調べてみた
  1. 実行コマンドはcli.py
    Evaluationを実行したときにNNCが何を動かしているかコンソールに出ていました。NNablaのCLI(コマンドラインインターフェース)であるcli.pyを実行していました。
  2. 実行コマンド(cli.py)のパラメタ
    cli.pyの実行コマンドも調べてみました。

    nntxtはネットワークの定義です。NNCで作成したものをそのまま使えます。
    パラメタファイルは学習済のパラメタです。NNCで作成したものをそのまま使えます。
    データ定義はINPUTデータの定義です。NNCで作成されたものを流用できます。
    出力先のディレクトリは出力結果の出力先です。

さあ。実行方法が分かったので後はこれをサーバーで実行するだけです。

3.サーバー上のNNablaで学習済モデルを実行してみた
  1. nnablaのインストールディレクトリの確認
    Nnablaを実行するにあたり、nnablaのインストールディレクトリを確認しましょう。

    # nnablaのインストールディレクトリ確認
    pip show nnabla
    Name: nnabla
    Version: 0.9.9
    Summary: Neural Network Libraries
    Home-page: https://github.com/sony/nnabla
    Author: UNKNOWN
    Author-email: nnabla@googlegroups.com
    License: Apache Licence 2.0
    Location: /usr/local/python/lib/python3.4/site-packages ← インストールディレクトリ

    なので、cli.pynoのインストールディレクトリは以下になります。
    //usr/local/python/lib/python3.4/site-packages/nnabla/utils/cli/cli.py

  2. cli.pyを実行する
    ではcli.pyを実行してみましょう。必要なファイルはNNCから取得してください。
    各ファイルの格納先は前述した通りコンソールログに表示されているので説明を割愛します。

    # cli.pyの実行コマンド例
    python /usr/local/python/lib/python3.4/site-packages/nnabla/utils/cli/cli.py forward -c ./net.nntxt -p ./parameters.h5 -d ./test.csv -o ./OUTPUT

    2018-05-20 00:51:11,546 [nnabla][INFO]: Initializing CPU extension...
    /usr/local/python/lib/python3.4/importlib/_bootstrap.py:321: FutureWarning: Conversion of the second argument of issubdtype from float to np.floating is deprecated. In future, it will be treated as np.float64 == np.dtype(float).type.
    return f(*args, **kwds)
    2018-05-20 00:51:13,506 [nnabla][INFO]: Parameter load (<built-in function format>): ./parameters.h5
    2018-05-20 00:51:13,506 [nnabla][WARNING]: Old-style context. Updating to new format.
    2018-05-20 00:51:13,519 [nnabla][INFO]: DataSource with shuffle(False)
    2018-05-20 00:51:13,521 [nnabla][INFO]: Using DataSourceWithFileCache
    2018-05-20 00:51:13,521 [nnabla][INFO]: DataSource with shuffle(False)
    2018-05-20 00:51:13,521 [nnabla][INFO]: Cache Directory is None
    2018-05-20 00:51:13,521 [nnabla][INFO]: Cache size is 1000
    2018-05-20 00:51:13,523 [nnabla][INFO]: Tempdir for cache /tmp/tmpg6vxe8z0 created.
    2018-05-20 00:51:13,523 [nnabla][INFO]: Creating cache start
    2018-05-20 00:51:13,554 [nnabla][INFO]: Creating cache file /tmp/tmpg6vxe8z0/cache_00000000_00000000.h5
    2018-05-20 00:51:13,556 [nnabla][INFO]: Creating cache end
    2018-05-20 00:51:13,556 [nnabla][INFO]: Using DataSourceWithMemoryCache
    2018-05-20 00:51:13,556 [nnabla][INFO]: DataSource with shuffle(False)
    2018-05-20 00:51:13,561 [nnabla][INFO]: On-memory
    2018-05-20 00:51:13,561 [nnabla][INFO]: Using DataIterator
    2018-05-20 00:51:13,564 [nnabla][Level 99]: data 1 / 1
    2018-05-20 00:51:13,573 [nnabla][Level 99]: Forward Completed.

    さくっと正常終了しました。
    NNCでやっているのと同じことをしただけなので動いて当たり前ですが、すんなり動いて少しびっくりしました。

4.学習済モデルをサーバー上で動かすことのメリット

Neural Network Console上でテスト実行は出来るのに、サーバー上で動かす必要あるの?Neural Network Consoleが実行しているコマンドをただ実行しているだけじゃん。と思った方もいると思います。

やっていることはNeural Network Consoleと変わりません。しかし、Neural Network ConsoleのGUIを使わずに実行できることにメリットがあります。

本当はcli.pyを使わず、pythonから直接実行する方法もあるようですが、自分にはまだ難しいのでcli.pyを使いますが、これだけでもだいぶメリットがあります。
 

【メリット】

  1. プログラムから呼び出せる
  2. 出力ディレクトリが固定
    NNCから実行するとNNCが日付付きの名前をつけてしまいます。
    出力先が固定なのでツールで結果を取りだすということが用意に出来るようになります。

これにより、自作のWEBサイト等との連動が容易になります。

5.Neural Network Consoleで作成した学習モデルを動かす手順のまとめ

 

最後にもう一度、学習済のモデルを実行する流れを見てみましょう。

# ①入力ファイル
cat ./test.csv
x:image,y:9
test.png,0

# ②実行コマンド
python /usr/local/python/lib/python3.4/site-packages/nnabla/utils/cli/cli.py forward -c ./net.nntxt -p ./parameters.h5 -d ./test.csv -o ./OUTPUT

# ③出力結果
cat ./OUTPUT/output_result.csv
x:image,y:9,y'
/home/apl/nnabla/sample/test.png,0,0.9995036125183105

やっていることはシンプルです。
上記のことをプログラムからやらせてあげればアプリケーションにNeural Network Consoleで作成したAIを組み込むことが出来ます。

【プログラムにAIを組み込む例】
今回用いているサンプルは、0~9の手書き文字の画像が何かを評価するものです。
画像ファイルを読み込むWEBサイトを作成して、読み込んだ画像を以下の手順で処理するプログラムを作れば、画像評価サイトが作れます。

  • a. ①のファイルに定義されているファイルを置き換える
    具体的にはtest.pngを置き換える
  • b. ②のコマンドを実行する
  • c. ③のファイルから結果を取得する。
     

次は、実際にWEBサイトと連動してみたいと思います。
f:id:shibayu2002:20190310112521j:plain

 

◆ 推薦図書

詳解 ディープラーニング TensorFlow・Kerasによる時系列データ処理 [ 巣籠 悠輔 ]

価格:3,672円
(2018/11/25 22:43時点)
感想(0件)

【送料無料】 機械学習 データを読み解くアルゴリズムの技法 / 竹村彰通 【本】

価格:6,696円
(2019/3/23 23:16時点)
感想(0件)

広告




スポンサーリンク
広告




広告




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
広告