cedro-blog

SONY Neural Network Consoleで指原莉乃をもっとディープラーンング

前回のまとめ

前回は、下記のプロセスをやってみました。

1)指原莉乃さんを識別するための画像データの収集と前処理(Pythonを使わずに)

2)SONY Neural Network Consoleに、指原莉乃さんを識別するためのDATASETを登録

3)SONY Neural Network Console に、指原莉乃さんを識別するプロジェクトを登録(サンプルプロジェクトを流用)

4)学習と評価の実行

その結果、データ数150とちょーデータ数量が少ない中で、識別精度は73.33%とまあまあの数字が出せました。

とりあえず、オリジナルデータ作成から学習・評価まで一連の流れを体験できたのは、充実感で一杯でした。

識別精度をもっと上げたい

でもしばらくすると、今度は、識別精度をもっと上げたくなって来る。

当然、データ数量を増やすことは必要だが、その前にすぐ出来ることがある。

ニューラルネットワーク構成の最適化だ。

ということで、今回は、前回SONY Neural Network Consoleに登録した指原莉乃さんを識別するためのDATASETを使って、より識別精度の高いネットワーク構成を追及してみます。

識別精度はどこまで上がるでしょうか。ワクワク、ドキドキ。

まず、サンプルプロジェクトをもっと試してみる

先回、流用したサンプルプロジェクトのネットワーク構成は、こんな形

全結合層(A)が1つだけのとてもシンプルなもので、これで識別精度は73.33%という結果でした。

「0」か「1」を識別するタイプのネットワーク構成を持つ他のサンプルプロジェクトをいくつか評価してみると、こんな結果に

① 02_binary_cnn.sdcproj: 識別精度80.00%

② 10_deep_mpl.sdcproj:識別精度76.66%

③ element_net.sdcproj:識別精度76.66%

①がいい感じですね。おっとこれだけで、識別精度が73.33%→80.00%(+6.67ポイント)に向上しました。これはどういうネットワーク構成かと言うと

構成をみると、畳み込み層(C)を2つ持つ、畳み込みニューラルネットワーク(Convolution Neural Network)、いわゆるCNNでした。

やっぱり、高解像度の画像データ識別と言えば、CNNですね。

さて、どういうネットワーク構成が良いのか大体あたりが付いたら、いよいよ自動最適化です。

SONY Neural Network Consoleの真骨頂、自動最適化機能を使ってみる

SONY Neural Network Consoleは、ニューラルネットワーク構成の自動最適化機能を持っています。

どういう機能かと言うと、コンピューターが自動的にネットワーク構成を様々に変化させながら、より精度が高く演算量の少ないネットワーク構成を探す最適化を行ってくれるものです。

これって凄いことだと思いませんか。

私の様なディープラーニング初心者にとっては、正にうってつけの機能だと思います。

先ほど、サンプルプロジェクトの中で一番識別精度が高かった、02_binary_cnn.sdcproj  をベースに、自動最適化を行うことにします。

プロジェクトを開いたら、CONFIG画面にします。そうすると、Structure Searchというところがあります。

ここの「Enable」のところにチェックを入れて学習を実行すると、ユーザーが学習停止ボタンを押すまで、コンピューターは最適化に向けた学習を永遠に継続します。

この自動最適化のオプションとしては、

Method:Radom(時間を掛けて最適化)か Network Feature+Gaussian Process(素早く)→ 私はRandomを選択しました。

Optimaize for:Error(とにかく誤差を少なく)かError and Caluculation(誤差も演算量も少なく)→ 私はError and Caluculationを選択しました。

その他、探索範囲を限定させるオプションや1つのネットワークに長時間拘らせないオプションもありますが、とりあえずデフォルトのままで良いと思います。

さて、学習ボタンを押して、自動最適化の開始です。

凄いです。次から次へと、コンピューターが最適化に向けて試行錯誤を延々と繰り返します。

30分くらい掛けて、90回くらい試行錯誤させて評価した結果、ネットワーク構成の最適化結果は以下のようになりました。

左側が最適化前、右側が最適化後です。

何が変わったかと言うと、基本的には畳み込み層(C)が2層のCNNのままです。

しかし、上から3段目のレイヤーのM(MaxPooling)がA(AveragePooling)に変更、上から7段目のレイヤーのT(Tanh)がE(ELU)に変更され、多くのパラメーターの設定が変更されています。

このコンピューターの自動最適化によって、識別精度は80.00%→86.66%(+6.66ポイント)まで向上しました。

SONYさん、素晴らしい!

画期的な自動最適化機能

今回、SONY Neural Network Console の自動最適化機能を使ってみて思ったことは、

これで、ニューラルネットワークのプログラム開発の部分は自動化されるだろうな、ということ。

SONYからは、こんなメッセージが伝わって来ます。

プログラム開発の部分はSONYに任せて下さい。

その分、皆さんは、何を目的にディープラーニングするのか、そのためにはどういうデータをどうやって集めるのか、を考えるのに時間を使うべきです。

ワクワクする時代が始まったようです。