Consoleを使ってみました2017年12月15日プログラミングチュートリアルTweetこんにちは、エンジニアのほしです。私は現在ディープラーニングを勉強中です。Console」というツールがかなり使えるのでご紹介します。Console」はソニーが2017年8月に無償提供を開始したディープラーニングの統合開発環境であり、ニューラルネットワークの設計・学習・評価をグラフィカルに行えることができます。そもそもディープラーニングとは何なのでしょうか。wikipediaによれば「多層のニューラルネットワークよる機械学習手法」とされています。ここで出てくる「ニューラルネットワーク」は人間の脳内にある神経細胞(ニューロン)とそのつながりを数学的に扱いやすくモデル化したものであり、「機械学習」は人間が持つ学習能力をコンピュータ上で実現することです。コンピュータに人間の脳構造を模させて学習能力を実現させようとするのがディープラーニングです。ディープラーニングの最終的な利用方法は学習により最適化された多層ニューラルネットワークを使用して、画像や文字、事象といったものを予測・判定を行うことになります。最終的な利用方法に行くまでに、目的に見合った様々な過程があります。Console」では1と3以外はかなり簡単にできるツールとなっています。Console」の実際の使い方はツールに付随してくる日本語のマニュアルに載っているので、使い方については省かせていただき、今回は入力された数字の画像を判定するニューラルネットワークをこのツールを使い作成し、学習と評価を行ってみようと思います。導入手順ダウンロードしたフォルダの中にセットアップからチュートリアルの手順が載っているので、ここではダウンロードまでの説明をします。Console」のサイトに行きます。https://dl.sony.com/ja/サイトに行ったら「Windowsアプリではじめる」をクリックします。同意書に対する同意確認と、メールアドレスを入力するフォームがあるのでメールアドレスを入力後に「上記に同意して送信」をクリックします。クリックするとツールのダウンロードが開始されます。ダウンロードしたファイル「neural_network_console_110.zip」を解凍します。場所はどこでも大丈夫ですが、ここではCドライブ直下に解凍します。※ファイル名は2017/12/15時点のものです。バージョン等により変更される場合があります。セットアップフォルダ内の「manual_ja.pdf」に日本語で以降のセットアップ手順とサンプルプログラムによるチュートリアルが載っているので参照してください。GPUを使用する場合についてドライバが最新であるかの確認をするポップアップが出ます。Package」がインストールされていれば大丈夫です。Package」がインストールされていない場合はポップアップに記載されたURLからダウンロードしてインストールをお願いします。チュートリアルのサンプルプログラムマニュアル「manual_ja.pdf」で詳しい説明がなされているので、かいつまんだ説明となりますが、サンプルは入力された画像が数字の9であるかを判定するニューラルネットワークになっています。このニューラルネットワークは28×28の画像を入力に受け取り、0から1の間の値を出力をします。出力は入力画像が9である確率を表していて、出力が1であれば画像が9と判定され、0に近づくと画像が9である確率が下がっていきます。数字を認識するニューラルネットワークの作成さっそくですが、数字を識別する簡単なニューラルネットワークを作成してみますサンプルでは入力された画像が9であるかの判定でしたが、ここでは0から9について分類をするニューラルネットワークを作成します。どのようなニューラルネットワークが適しているのかを調べます。正直な話、ニューラルネットワークは直感で作れるわけではないので、論文やWeb上で処理に見合った構造を探して、それを元に作るしかありません。言い方を変えればこのツールを使うと実装コードがなくても、構造を示す画像や各レイヤのサイズさえわかってしまえば、簡単に作成することができます。Network」)と言われるニューラルネットワークを使用するのが最適だそうです。ディープラーニング」でオーガニック検索して最も簡単そうなのをチョイスして作成しました。ツールによるニューラルネットワークの実装は、ニューラルネットワーク構造に対応するコンポーネント(レイヤ、層)を置いて、サイズを指定し、それぞれを接続していくだけとなっています。詳しくはマニュアルを参照してください。(ただし、各コンポーネントの説明は難しくてよく分からないと思います。私がそうでした)作成したニューラルネットワークは入力は「INPUT」レイヤで28×28の画像データを入力として受け取ります。最終的な出力はサイズ10の配列となり、配列のインデックスが判定候補の数字に対応し、値は入力がその数字となる確率となります。インデックス7の値が0.5)と出力されれば入力された画像は1が50%、7が50%、つまり1か7の判別がついていない状態になります。画像認識のニューラルネットワーク学習ディープラーニングでの学習とは、コスト関数と呼ばれる指標を0に近づけていくことにあります。コスト関数は各レイヤのパラメータ、学習データに対する出力と正解の差から生成され、今回のコスト関数の場合、端的に言うと以下のような性質をもつ形式になります。場合はコスト関数が0に近づく。学習では各レイヤのパラメータを最適化して学習データに対する出力と正解が同じになるようにしていきます。学習用データ今回は学習データとして0から9の手書きの画像60000件を使用します。「x:image」は28×28の入力画像、「y:label」は入力画像に対する正解の数字となります。なれば正解となります。学習結果マニュアルを参照していただければわかりますが、データさえ用意できていれば、学習はボタン一つでできます。(ニューラルネットワークの複雑さにより時間がかかりますが)実際に学習用データで学習させた結果が以下となります。横軸は学習回数(Epoch)を示します。青線がコスト関数の値、赤線が学習データの入力に対するエラー率です。学習回数にしたがってコスト関数の値とエラー率が下がっています。評価(テスト)学習により各レイヤのパラメータが最適化されたら、次はそのパラメータを設定したニューラルネットワークの評価を行います。評価も学習と同じで、データさえ用意すればボタン一つで行なえます。評価には学習用データとは異なるデータを使用します。今回は10000件のデータを使用します。評価結果この表は評価データの正解と評価データをニューラルネットワークに投入して得られた結果のマトリックスです。対角の値が出力結果と正解の値が一致している件数でそれ以外は誤認している件数です。Percision行が各数字の判定精度となっています。平均が約99%の精度で判別が行えています。アプリでの利用このツールではニューラルネットワークの設計、学習、評価が行えますが、作成したニューラルネットワークをプログラムやアプリにに組み込むにはどうすればよいのでしょうか。エディット画面で右クリックをしコンテキストメニューから[Export]を選択するとpythonのコードを出力することができます。出力されたpythonコードと最適化されたパラメータファイルを用いてアプリに組み込みます。出力されるコードは「NNabla」といわれるこれもソニーが提供しているニューラルネットワークのライブラリで記述されています。Console」の紹介でした。次回はディープラーニングを使用して、ちょっとおもしろいことができればなぁと考えています。次の記事へDXO株式会社デジタル×アウトソーシングを組み合わせたコンサルティング支援でお客様のビジネス発展を支援するITソリューション企業のDXO株式会社です。DXOブログでは、システム開発、Web制作、デザインなどのITに関するためになる情報や社内のイベント、お知らせなどを掲載していきます。PHPによる自社パッケージシステムや受託案件の開発プロジェクトに参画いただきます。IT化の遅れが問題となっている業界に対し、システムを開発します。本気でエンジニアとして頑張りたい想いのある方、常に新しい技術を吸収し、自分のものにしていくことが好きな方、チームで何かを成し遂げることが好きな方フロントエンドエンジニア仕事内容HTML、CSS、JavaScriptを使用して、Webサイトの構築・設計を行います。