アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うこと。

オリジナル画像で新規データ・セットを追加する:使い方9/ニューラルネットワークコンソール

オリジナルの学習・評価用画像を使って、新規データ・セットを作成します。

 

それを、ニューラルネットワークコンソールで、CNNを組んで、学習と評価をプログラミング一切無しのGUIだけでやってみます。

 

この記事の対象読者は、文系で数学は苦手でプログラムも得意ではないけど、人工知能・・特に深層学習(ディープラーニング)の技術には興味があるという方を想定しています。

 

また、続きもの的に前回からの引き続きで書いている部分もあるので、まだの方は、下記の一覧で使い方1から順番に読んでもらえると、よりわかりやすいかと思います。

arakan-pgm-ai.hatenablog.com

 

今回は前回からの続きではないですが、CNNについての説明は、使い方5で簡単にやってるので、わからない方は、そこだけでも読んでもらえると良いかなと思います。

 

今回利用する画像データは、自作の「画像データ大量生成ツール」で作ったものです。

 

この「画像データ大量生成ツール」のダウンロード場所や仕組み(VBAソースコード含む)と、使い方の解説は、来週末に「番外編」として書こうかなと思ってますので、今回はデータありきで話をすすめます。

 

独自データ・セットを作るだけなら、前にCSVフォーマットのテキストデータを使ってやりました。

arakan-pgm-ai.hatenablog.com

 

今回は、その画像版です。 

画像データのダウンロード  

とりあえず、今週はデータがある所からスタートします。

 

まず、GitHubにデータをあげているので、ダウンロードします。

github.com

 

ZIPファイルでダウンロードしてください。

 

今回用意した画像データはこんな感じにアルファベット1文字を、様々なフォントと文字サイズと場所でバリエーションを作ったものです。

f:id:arakan_no_boku:20170902223040j:plain

 

この「A,a」なら「0」、「B,b」なら「1」を正解として、フォルダを作ってます。

 

ニューラルネットワークコンソールの画像データは、以下のルールに従って格納する必要があります。

  • フォルダ毎に分類されていないといけない。
  • フォルダ名が正解ラベルと一致していないといけない。

 

それにあわせて作っているので、フォルダ名などを変更しないでくださいね。 

 

さて、ダウンロードしたファイルを解凍して、適当なフォルダに置きます。

 

今回は、c:\tmp\bokudata というフォルダを作って、そこに置きました。

f:id:arakan_no_boku:20170902232400j:plain

 

気をつけるのは、このフォルダに他のファイルをおかないことです。

 

置くと、後でエラーで苦しむことになりますよ。

 

新規データセットを生成する場所の準備

 

次に、{ニューラルネットワークコンソールのインストールフォルダ}\samples\sample_dataset フォルダの下に適当なフォルダを作ります。

 

今回は、「bokudata」にしました。

 

作成した{ニューラルネットワークコンソールのインストールフォルダ}\samples\sample_dataset\bokudata は、後でニューラルネットワークコンソールによって更新されるフォルダになるので、コピーとかしないでくださいね。

 

ニューラルネットワークコンソールで新規データ・セット作成

 

ここまでできたら、ニューラルネットワークコンソールを立ち上げます。

f:id:arakan_no_boku:20170902223807j:plain

 

そして、DATASETを開き、「+ Create Dataset」ボタンを押します。

 

ここで必要な項目を入力します。

f:id:arakan_no_boku:20170902233244j:plain

 

簡単に解説しておきます。

 

Source Dir

 :ダウンロードしたデータを置いたフォルダを指定します。

 :今回の場合、c:\tmp\bokudata です。


Output Dir

 :処理済のデータを出力するフォルダを指定します。

 :今回の場合、{インストールフォルダ}\samples\sample_dataset\bokudataです。


Shaping Mode

 :デフォルトのままで問題ないです。

 

Output Color Ch

 :今回はモノクロデータなので、「1」です。

 :カラー画像の場合は「3」に変更します。

 

Output Width

 :出力画像の横幅です。今回は「28✕28」ですから、28です。


Output Height

 :出力画像の縦幅です。今回は「28✕28」ですから、28です


Shuffle the order of the data

 :デフォルトのまま(ON)にします。シャッフルしてくれます。


File Name

 :作成するデータセットCSVのファイル名です。

 :後で識別しやすい名前に変更します。


Ratio (%)

 :ここで指定した比率で、学習用データとテスト用データに振り分けてくれます。

 :学習用 75 テスト用 25 くらいが適当じゃないですかね。

 :ここを変更する時は、合計100になるように注意します。

 

入力できたら、「Apply」ボタンを押します。

 

しばらく、こんな感じの画面がでてきますけど、待ちます。

f:id:arakan_no_boku:20170902234759j:plain

 

処理が終わると、こんな感じでプレビューされます。

f:id:arakan_no_boku:20170902234844j:plain

 

テキストデータを扱う時には、パスと正解ラベルを書いたCSVデータを、自分で作らないとダメだったのですが、画像の場合は、そのファイルもニューラルネットワークコンソールが自動生成してくれます。

 

みたところ、問題ないようです。

 

新規プロジェクトで新規データ・セットを使う

 

それでは、早速、プロジェクトを作って使ってみましょう。

 

PROJECTを開いて、「New Project」ボタンを押します。

f:id:arakan_no_boku:20170902235819j:plain

 

以下の順番でレイヤーをドラッグ&ドロップして、Shift+クリックで線でつなぎます。

  1. input
  2. convolution
  3. ReLU
  4. MaxPooling
  5. convolution
  6. ReLU
  7. MaxPooling
  8.  Affine
  9. Sigmoid
  10. BinaryCrossEntropy

 

基本的なCNN(Convolution Neural Network)ですね。

f:id:arakan_no_boku:20170903000525j:plain

 

とりあえず、この辺で一回名前をつけて、プロジェクトを保存しておきましょう。

f:id:arakan_no_boku:20170903002748j:plain

 

名前は自分がわかりやすければ、なんでもいいです。

 

ただ、日本語の名前はさけてくださいね。

 

あと、保存先も{インストールフォルダ}の下の「.\samples\sample_project」フォルダの下に適当なフォルダをつくって、そこに置くのをおすすめします。

 

さて、保存できたら、設定していきます。

 

まず、DATASETタブを開きます。

f:id:arakan_no_boku:20170903001244j:plain

 

右上の「Open dataset」ボタンを押し、表示された選択肢の中から、TrainingとValidationにそれぞれ、さきほど生成時に入力したCSVファイル名をさがして割り当てていきます。

 

正しく割当できていれば、Trainingが2640件、validationが880件になっているはずです。

f:id:arakan_no_boku:20170903001651j:plain

 

DATASET以外の各レイヤーの設定

 

続けて、各レイヤーを設定していきます。

 

今回はわざとデフォルトの設定にあわせて、データを作成しているので変更はいりませんが、サイズ等を変更した場合は、画像にあわせて変更する必要があります。

 

Convolutionレイヤーは2つとも、W.initializerを「NormalAffineHeForward」に変更しておきます。

f:id:arakan_no_boku:20170903002306j:plain

 

理由がわからない場合は、こちらの記事も見てくださいね。

arakan-pgm-ai.hatenablog.com

 

次にAffineのOUTPUTを、デフォルトの100から1に変更します。

f:id:arakan_no_boku:20170903145454j:plain

 

これをせず、デフォルトの100のままでもエラーにはならないですけど、正確さが20%とか30%とかに落ちてしまったりしますので、やっておきます。

 

学習と評価の実行

 

とりあえず、この設定で学習をやってみましょう。

f:id:arakan_no_boku:20170903003648j:plain

 

何かいい感じのきれいな学習曲線になってます。

f:id:arakan_no_boku:20170903145950j:plain

 

続けて、評価もやってみます。

f:id:arakan_no_boku:20170903150102j:plain

 

99.2%!上出来です。

f:id:arakan_no_boku:20170903150133j:plain

 

まあ、MNISTと同じようなデータをアルファベットで作ってみた・・というだけなので、結果がこうなるのは当然なのですがね。

 

ただ、作成した独自画像データ・セットが使えて、かつ、DATASETへの追加手順も間違ってはないようだということで、めでたし、めでたしです。

 


前の記事

 

関連カテゴリの一覧(この一覧で使い方1から順番に読むことをおすすめします)

arakan-pgm-ai.hatenablog.com

 

f:id:arakan_no_boku:20170910161122j:plain