ニューラルネットワークコンソール(Neural Network Console)クラウド版で学習済のモデル・パラメータをダウンロードして、nnabla_cli.exeを使って推論だけ実行するというのを試みてます。
nnabla_cli.exeのバージョンによっては実行できないことがあります。
そのへんの情報も最後のほうに書いてます。
クラウドで学習してローカルで再利用する
クラウドで始めるディープラーニングということで、こちらのサイトでアピールされているわけです。
アピールポイントを引用すると次の3つ。
- インストールは不要:サインインするだけで、常に最新の機能とクラウドの豊富なリソースを利用できます。
- Macでも使える:Windowsに加え、Mac、Linuxなど様々なOSで利用できます。インターネットに接続できる環境であれば、どこからでもアクセス可能です。
- 優れたポータビリティ:クラウド上で学習した結果は、ダウンロードしてNeural Network Librariesで実行できます。WindowsアプリのNeural Network Consoleとのプロジェクトのやりとりにも対応しています。
今回は、上記を確認しつつ、最終的に「クラウド上で学習した結果は、ダウンロードしてNeural Network Librariesで実行できます。」を試してみようということです。
それも、pythonのソースをガリガリ書くのではなく、nnabla_cli.exeという付属ツールを使って、プログラミングなしでやるのを試します。
とりあえずプロジェクトのやりとりだけやってみる
クラウド版を立ち上げます。
上記のサイトから「オープンβ版ではじめる」をクリックするか、クラウド版のダッシュボードに直接ログインします。
ログインできたら、projectタブを開いてプロジェクトの一覧を表示します。
適当なプロジェクトを選んで(と言っても、自分で作成したプロジェクトしか選べませんが)ダウンロードボタンを押します。
プロジェクトファイルを適当なフォルダにダウンロードします。
うん・・。
まんま、プロジェクトファイルのみですね。
これだと、Windows版のニューラルネットワークコンソールで開けば、設計したネットワークモデルやCOFIGの内容は読み込めるだけです。
どうも、こちらは「WindowsアプリのNeural Network Consoleとのプロジェクトのやりとりにも対応しています。」の方だけみたいですね。
学習済モデル&パラメータをダウンロードする
じゃあ・・ということで。
プロジェクト名をクリックして開き、TRAININGタブを開きます。
「.nnp」ファイルをダウンロード
学習結果の右上のあたり(上図の赤枠)に「・・・」というマークがあります。
こいつをクリックすすると、「Download」というのがでてきます。
こいつを押すと、「.nnp」ファイルをダウンロードできます。
nnpファイルとは
おお・・。これですね。
nnpファイルというのは、NNablaのC++モジュールで読み込める形式で、pythonモジュールの「net.nntxt」と「parameters.h5」をZIP(くっつけた)感じのものみたいです。
クラウドのEVALUATIONタブの実行ログを見てみると、推論の実行を以下のように行ってます。
nnabla_cli forward -c /home/nnabla/results/results_current_10.nnp -d ccbf15a0-bcb6-4ba6-b10e-27fc877c4348/4/index.csv -o /home/nnabla/results
nnabla_cli.exeのヘルプだと
usage: nnabla_cli forward [-h] -c CONFIG [-p PARAM] [-d DATASET] -o OUTDIR
optional arguments:
-h, --help : show this help message and exit
-c CONFIG, --config :CONFIG path to nntxt
-p PARAM, --param PARAM path to parameter file
-d DATASET, --dataset DATASET path to CSV dataset
-o OUTDIR, --outdir OUTDIR output directory
となっていて、nntxtファイルと、h5ファイルにわかれてないと駄目にみえますけど、nnabla_cli の -c オプションには「nnpファイル」を受け取るパターンもあるみたいです。
nnabla_cli.exeでの推論実行
これでクラウドで学習済みのモデルとパラメータを使った推論を、ローカルで実行するのはできそうです。
これが「クラウド上で学習した結果は、ダウンロードしてNeural Network Librariesで実行できます。」なんだろうなと、得心しました。
なお、nnabla_cli.exeでの推論実行手順はこちらをご覧ください。
バージョンによってうまくいかなかったという記録
さてさて・・。
ここまでは順調だったんですけどね。
つまづきました。
2017/11/11時点
実際に、NNablaをインストールした環境で、データ・セットを用意してダウンロードしたもので推論をやってみました。
nnabla_cliの指定の仕方は、クラウドの実行ログに表示されていたとおりです。
でも、エラーでとまって推論はできてません。
エラーメッセージはこういうものです。
(message_descriptor.full_name, name))
google.protobuf.text_format.ParseError: 1:1 : Message type "NNablaProtoBuf" has no field named "0.1".
protobufのパーサーエラー・・。
これは手のうちようがありません。
protobufは、Protocol Buffersのことで、Googleが開発したデータの通信・永続化のためのシリアライズフォーマットです。
そして、エラーをはいているのは、そのGoogleのパーサーみたいだからです。
ここからは推測です。
実は「オープンβ版の制約事項」のドキュメントがあります。
この中にこんな記述があります。
古いバージョン(Version 1.00)のWindows版に同梱されるサンプルプロジェクトファイルはアップロードできないことがあります。
うん?!、今ダウンロードできる最新版が「Version1.00」なのに、このドキュメントには、それが古いバージョン・・と書かれている。
つまり、クラウド版のニューラルネットワークコンソールは、ベースがバージョンアップ版じゃないか?ということです。
バージョンが違うから、今のローカル環境のnnabla_cliのヘルプに、nnpファイルについて書かれてないんだろうな・・。
そうだとしたら、ダウンロードしてきたファイルも、そのバージョンよりは古いと思われる現在の環境ではうまく実行できないのは、当たり前です。
なので、今回の結論です。
とりあえず、正式版になって、NNablaも含めてクラウドとバージョンが揃ってから、再チャレンジだな。
ということですね。
2017/12/01追記
バージョンアップ版で再挑戦しましたが、未だ、うまくいってません。
こんなエラーがでてます。
[nnabla][Level 99]: Loading nn nnp_version.txt in C:\tmp\nnc\result.nnp
Traceback (most recent call last):
File "c:\anaconda3\envs\nnabla\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\anaconda3\envs\nnabla\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\anaconda3\envs\nnabla\Scripts\nnabla_cli.exe\__main__.py", line 9, in <module>
File "c:\anaconda3\envs\nnabla\lib\site-packages\nnabla\utils\cli\cli.py", line 195, in main
args.func(args)
File "c:\anaconda3\envs\nnabla\lib\site-packages\nnabla\utils\cli\forward.py", line 167, in forward_command
info = load.load(files, prepare_data_iterator=False, batch_size=1)
File "c:\anaconda3\envs\nnabla\lib\site-packages\nnabla\utils\load.py", line 576, in load
text_format.Merge(f.read(), proto)
File "c:\anaconda3\envs\nnabla\lib\site-packages\google\protobuf\text_format.py", line 525, in Merge
descriptor_pool=descriptor_pool)
File "c:\anaconda3\envs\nnabla\lib\site-packages\google\protobuf\text_format.py", line 579, in MergeLines
return parser.MergeLines(lines, message)
File "c:\anaconda3\envs\nnabla\lib\site-packages\google\protobuf\text_format.py", line 612, in MergeLines
self._ParseOrMerge(lines, message)
File "c:\anaconda3\envs\nnabla\lib\site-packages\google\protobuf\text_format.py", line 627, in _ParseOrMerge
self._MergeField(tokenizer, message)
File "c:\anaconda3\envs\nnabla\lib\site-packages\google\protobuf\text_format.py", line 695, in _MergeField
(message_descriptor.full_name, name))
google.protobuf.text_format.ParseError: 1:1 : Message type "NNablaProtoBuf" has no field named "0.1".
Googleグループで質問中ですが、まだエラーを回避できてません。(;_;)
2017/12/08追記
上記の現象は、Neural Network Librariesのバグだったみたいです。
修正版を出していただけるのを待ちたいと思います。
2017/12/22追記
NNablaをバージョンアップして、やっと推論実行できるようになりました。
NNabla(Neural Network Libraries)の0.9.6以降のバージョンを使う必要があります。
今のところ、Neural Network Librariesのサイトでは、ダウンロードできるバージョンが0.9.5になってます。
だけど、現時点で「pip install nnabla -U」をすると、0.9.7にバージョンアップされます。
2018/07/05 追記
>nnablaを0.9.7だと動いていたのですが・・・。
>nnablaを0.9.9だと動きません。
>調べた感じ、google.protobufのバグっぽいです。
>現時点の最新 1.01にバージョンアップすると動きます。
>動いたり、動かなかったり・・まあ・・過渡期ってことですかね。