こんにちはー。管理人のピヨ猫でーす。
Neural Network Consoleで機械学習をしてみているんだけど、Neural Network Consoleで作成したモデルってプログラムから実行することが出来るの?
GUIは便利だけどモデルが完成したらプログラムに組み込みたいんだけど、どうすれば良いのかな?
Neural Network Consoleで作成したモデルはプログラムから実行できるよ。分かり易く図解で説明するね。また、サンプルのVBAプログラムも公開するね。
以下の記事でもNeural Network Consoleで作成したモデルをプログラムから実行する方法を紹介しましたが、昨日、VBAで学習済モデルを実行するプログラムを作ってみたので、理解している間に改めて図解で記事にします。
1.Neural Network Consoleのチュートリアル
Neural Network Consoleのチュートリアル
Neural Network Consoleをコマンドプロンプトから実行する方法は本家SONYのサイトにて公開されています。
まずはこのサイトを読まれることをお薦めします。ただ、割とざっくり記載されているので、チュートリアルを読んでもわからないという場合は本記事をお読みください。
【本家SONYのチュートリアル】
https://support.dl.sony.com/docs-ja/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%9Aneural-network-console%E3%81%AB%E3%82%88%E3%82%8B%E5%AD%A6%E7%BF%92%E6%B8%88%E3%81%BF%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9/
Neural Network Consoleの学習済モデルをプログラムから実行する2つの方法
上述のサイトにも記載されていますが、SONY Neural Network Consoleの学習済モデルを実行する方法は2つあります。
1. コマンドラインインターフェイス(CUI)を用いて推論を実行する
コマンドラインインターフェイス(CUI)を用いてNeural Network Consoleの学習済モデルを実行する方法です。
後述のPython APIと異なりどんなプログラム言語からも実行することが出来ます。
今回はVBAから学習済モデルを実行するので、こちらの方法を紹介します。
なお、この方法は、毎回Pythonを起動し学習済みネットワークの構造やパラメータ、認識対象のデータセットの読み込みを行うため、実行速度が遅いというデメリットがあります。
コマンドラインインターフェイスは、それほどパフォーマンスを重視しないケースや、実験的に推論を実行させたい用途に向いています。
2. Python APIを用いて推論を実行する方法
Python APIを用いてNeural Network Consoleの学習済モデルを実行する方法です。
Neural Network Librariesの豊富な機能を直接利用することができ、外部のプログラムとの連携が容易でパフォーマンスにも優れています。
ただし、開発言語がPythonに限定されるというデメリットがあります。
なお、前述の通り今回は1のCUIによる実行方法の紹介となります。Python APIの使い方は改めて記事にしようと思います。
2.Neural Network Consoleの構成
Neural Network Consoleのモデルや生成されるファイルの関係は以下の様になっています。
cli.py
Neural Network Consoleのコマンドラインインターフェイス(CUI)です。Neural Network ConsoleのGUIも中でこのコマンドを実行しています。
モデルの機械学習も学習済モデルの実行もcli.pyコマンドにて行います。
net.nntxt
Neural Network ConsoleのGUI上に表示されているモデルをテキストにしたものです。
機械学習用のデータセット(訓練データ、テストデータ)のパスもこのファイルに記載されています。
Dataset(tran.csv、test.csv)
機械学習に用いる訓練データ、テストデータです。
progress.txt
調査中で用途不明です。0byteのテキストでOKですが、無いとcli.pyがエラーとなります。
results.nnp
Neural Network Consoleによるトレーニングで生成された学習済モデルです。
Neural Network Libraries(NNabla)を使って実行することが出来ます。(cli.pyも中でNNablaを使っているのでcli.pyを使って実行することも出来ます。)
monitoring_report.yml
機械学習結果のログファイルです。機械学習時のCost、training error、validation error が出力されます。
target.csv
学習済モデルを使って推論する対象の入力データです。
output_result.csv
学習済モデルを使って推論した結果が格納されるファイルです。
3.Neural Network Librariesのインストール
SONY Neural Network Consoleで作成された学習済モデルはNeural Network Libraries(NNabla)を使って実行します。
SONY Neural Network Consoleで作成された学習済モデルをプログラムから実行するにはNNablaが必要なので、NNablaをインストールする手順を説明します。
Neural Network Libraries(NNabla)とは
NNabla(Neural Network Libraries)はSONYが提供する機械学習のオープンソースです。
Neural Network Consoleのコアエンジンで、Pythonで動く機械学習のライブラリになります。
ライセンスはApache License 2.0となります。
PythonとNNablaのインストール
以下の記事を参照ください。
https://arakan-pgm-ai.hatenablog.com/entry/2017/09/26/080000
4.Neural Network Consoleで学習を行う方法
① 事前準備
機械学習の実行にはnet.nntxtとprogress.txtが必要です。
net.nntxtは機械学習モデルの構成と機械学習に用いるデータセット(訓練データとテストデータ)のパスが記載されたファイルです。
progress.txtは良く分かりませんが0byteでOKです(-_-;)
net.nntxtの取得方法
機械学習したいモデルをNeural Network Consoleから開き、① TRAININGタグを選択 ⇒ ② Open Result Location を選択します。
開いたフォルダからnet.nntxtとprogress.txtをプログラムを実行するフォルダにコピーします
② cli.pyの実行(train)
cli.pyをプログラムから実行します。
実行コマンド
python "cli.pyのパス"
train
-c "net.nntxtのパス"
-o "出力結果の格納パス"
実行コマンドサンプル
python "D:\opt\neural_network_console_140\libs\nnabla\python\src\nnabla\utils\cli\cli.py"
train
-c "D:\tmp\ai\fx_rate_analyse4\lstm-1day-30history\workspace\20190131\net.nntxt"
-o "D:\tmp\ai\fx_rate_analyse4\lstm-1day-30history\workspace\20190131"
VBAサンプルコード
Dim sCmd As String
Set oWSH = CreateObject("WScript.Shell")
sCmd = "python [cli.pyのパス] train -c [net.nntxtのパス] -o [出力結果の格納パス]
'cli.pyコマンド実行(引数1:cli.pyコマンド、引数2:DOC窓の表示有無、引数3:true=同期)
oWSH.Run sCmd, 1, True
③ 実行結果の取得
cli.pyコマンドの実行結果は-oで指定したフォルダに作成されます。
results.nnpが学習済モデル、monitoring_report.ymlは機械学習結果(cost、train_error、valid_error)が記載されたログファイルです。
5.Neural Network Consoleで推測を行う方法
① 事前準備
学習済モデルを使って推論を行うには学習済モデル(results.nnp)と推論に使うデータ(target.csv)が必要です。
results.nnpの作成方法は前述の通りです。(※ cli.pyで作成した学習済モデルではなくSONY Neural Network ConsoleのGUIで作成した学習済モデルでも問題ありません。)
推論に使うデータ(target.csv)の形式は訓練データ(tran.csv)、テストデータ(test.csv)と同じフォーマットであれば何でも問題ありません。
② cli.pyの実行(forward)
cli.pyをプログラムから実行します。
実行コマンド
python "cli.pyのパス"
forward
-c "results.nnpのパス"
-d "target.csvのパス"
-o "出力結果の格納パス"
実行コマンドサンプル
python "D:\opt\neural_network_console_140\libs\nnabla\python\src\nnabla\utils\cli\cli.py"
forward
-c "D:\tmp\ai\fx_rate_analyse4\lstm-1day-30history\workspace\20190131\results.nnp"
-d "D:\tmp\ai\fx_rate_analyse4\lstm-1day-30history\dataset\test20190131.csv"
-o "D:\tmp\ai\fx_rate_analyse4\lstm-1day-30history\workspace\20190131"
VBAサンプルコード
Dim sCmd As String
Set oWSH = CreateObject("WScript.Shell")
sCmd = "python [cli.pyのパス] forward -c [results.nnpのパス]-d [target.csvのパス] -o [出力結果の格納パス]
'cli.pyコマンド実行(引数1:cli.pyコマンド、引数2:DOC窓の表示有無、引数3:true=同期)
oWSH.Run sCmd, 1, True
③ 実行結果の取得
cli.pyコマンドの実行結果は-oで指定したフォルダに作成されます。
output_result.csvが推論結果です。
カンマ区切りのテキストファイルなので用意にプログラムから結果を取得できます。
VBAサンプルコード
Dim lTargetRow As Long
Open "output_result.csvのパス" For Input As #1
lTargetRow = 1
Do Until EOF(1)
Line Input #1, sLine
sValue = Split(sLine, ",")
SheetResult.Cells(lTargetRow, 5) = sValue(2)
lTargetRow = lTargetRow + 1
Loop
Close #1
6.Neural Network Consoleサンプルプログラム
Cli.pyを使ったVBAのサンプルプログラムをGIT HUBにアップしたので良ければ参考にしてください。
https://github.com/shibayu2002/nnabla_sample
それでは、少しでもこの記事がお役にたったら嬉しいです。