Neural Network Console の学習結果を外部アプリケーションから利用してみる

私が初めてSONY社のNNC(Neural Network Console)を触ったのは、ちょうど一か月ぐらい前になります。「これでディープラーニングできちゃうのー?」という驚きで、ほんとでほんとでサプライズでした。GUIベースで、機能がゴテゴテせずシンプルにまとまっており、難しそうな印象はありません。

・・・という出会いをしたのですが、折角の感動が冷めやらぬうちに、私もNNC関係の記事を書いてようかと思います。前回の『ソニー Neural Network Console と エクセルで始める ニューラルネットワーク』はNNCの紹介とディープラーニングで日経平均株価を予想する実例でしたが、今回、私はNNCの学習結果を利用し、実際にシステムに組み込む方法を紹介します。

折角だから、一番お手軽にやってみよう

NNCは、NNablaというディープラーニングのライブラリを利用しており、これをimportして使う方法が一般的ではないかと想像しています。この時点で、Python未経験者は一瞬怯んでしまったかもしれませんが、大丈夫です。今回は、PythonやAI関連技術を勉強したことない技術者でも実現可能な、最も簡単な方法でやってみます。

やり方はとても簡単です。NNCでEvaluationを実行すると、画面下部に以下のメッセージが表示されるのがわかります。

勘のいい方はお分かりだと思いますが、NNCは学習や評価の際に、Pythonのプロセスを立ち上げて処理しています。NNCではGUI操作でcli.pyキックしていますが、これを別なプログラムからプロセス起動してあげれば、ひとまず、とりあえずですが、目的は達成できてしまうのです。

cli.py forward に与える引数ですが、-c および -p は学習結果のファイルで、それぞれ net.nntxt, parmeters.h5 を指します。チュートリアルのプロジェクトでは、sample_project\tutorial 以下をたどっていくと、YYYYMMDD_HHMISS形式のディレクトリ内に生成され、学習結果やログ等が保管されているのがわかります。-d は評価対象のCSVファイルのパス、-o は結果出力先のディレクトリです。

学習結果を利用するWebアプリの作成

それでは、実際に簡単なアプリケーションから作ってみましょう。

チュートリアルとして、MNISTのデータセットを使い、与えられた画像が文字の「9」である確率を求める、というプロジェクトがあります。学習させるデータは「4」と「9」のみのごくシンプルなものです。

NNCでは、学習や評価の際は、所定のフォルダに画像とCSVファイルをあらかじめセットしておく必要があるのですが、それを動的に与えられるよう、Webアプリケーション化してみましょう。

まず、任意のディレクトリを作成し、net.nntxt, parmeters.h5 を配置します。さらに、そのディレクトリの下に推論した結果を格納するディレクトリ result を作成しておきます。

次に、WEBアプリ部分。コードはPHPで書きました。ファイルでPNG画像を選択し、「upload」を押すと、サーバ側でデータ保存およびcli.pyが実行されます。なお、画像はGrayScaleでないとエラーがでるので、NNC内に生成されたMNISTのPNG画像化データから選ぶのがよいと思われます。

推論の結果は、resultディレクトリ以下に output_result.csv ファイルが生成され、その中の y’ のカラムが「9」である確率を指しています。

実行結果

では実行してみましょう。ブラウザで上記プログラムが配置されたURLを開きます。MNISTのpng画像化されたファイルを選択し「upload」してみます。どうでしょうか。

上の例では、アップロードされた画像が「9」である確率は、 0.113530799747 と計算されました!

チュートリアルということで、ごく簡単なプロジェクトでしたが、雰囲気は掴めたかと思います。

おわりに

今回は、NNCをインストールした環境で、できるだけ簡単にアプリケーションから呼び出してみよう、ということで、すべてローカルのWindows環境で構築しました。NNablaの実行環境さえ構築すれば、同様の方法でLinux上でも動きます。PythonやC++が苦手という方、NNCやNNablaの知識がない方でもチャレンジできるので、興味がある方はお試しください。