ニューラルネットワークコンソールに付属のMNISTばかりだと飽きるので、オリジナルの学習・評価用画像を使って、新規データ・セットを作成します。
オリジナル画像データの準備
画像データをどこかから取得してくるか、自分で作る必要があります。
ただ、今回はinputの「1,28,28」というサイズは変更しない・・つまり、MNISTと同じモノクロの28×28サイズの画像を前提として、やりたいと思います。
カラー画像を使った場合のやり方は、こちらの記事で「Caltech」の画像データを使ってやってますので、こちらをどうぞ。
モノクロの28×28画像データ
ちょっと手頃なものが思いつかなかったので、自分で作ることにします。
とりあえずEXCELの「画像データ大量生成ツール」を作って、それを使います。
この「画像データ大量生成ツール」のダウンロード場所や仕組み(VBAのソースコード含む)と、使い方の解説はこちらに書いてます。
興味のある方はどうぞ。
2017/12/01追記
>以降の説明の画像は、Version1.00のものを使ってます。
>Version1.10で一部アイコンのデザインが変更になっています。
>ただ、見ればわかる範囲と判断して画面の貼り替えはしていません。
画像データの取得
今回は、作った画像データがある前提で、取得するところからはじめます
GitHubから画像データをダウンロードします。
bokudate.zipを解凍してください。
今回用意した画像データはこんな感じにアルファベット1文字を、様々なフォントと文字サイズと場所でバリエーションを作ったものです。
この「A,a」なら「0」、「B,b」なら「1」を正解として、フォルダを作ってます。
フォルダ名とかは変更しないでください。
画像データの配置ルール
ニューラルネットワークコンソールの画像データは、以下のルールに従って格納する必要があります。
- フォルダ毎に分類されていないといけない。
- フォルダ名が正解ラベルと一致していないといけない。
- フォルダ名と正解ラベルは、0,1,2・・等の数字にしておく
ようするに、ニューラルネットワークコンソールの画像データは、正解ラベル(例えば、0とか1とか)の名前にしたフォルダの下に、サイズを揃えた画像データを置いておけば良いということです。
作業用フォルダの準備
ダウンロードしたファイルを解凍して、適当なフォルダに置きます。
このフォルダはあくまでワーク用の一時フォルダです。
今回は、c:\tmp\bokudata というフォルダを作って、そこに置きました。
ここで、気をつけないといけないことがあります。
・このフォルダに他のファイルをおかないこと
・ファイル名やフォルダ名に全角文字を含めないこと
です。
おいても、DATASET作成時にはエラーにはならなくても、学習や評価の実行時に原因不明としか見えないエラーで苦しむことになります。
新規データセットを格納する本番用フォルダ
今度は、DATASETを格納する「本番用」のフォルダを作ります。
ここで注意するのは。
本番用のフォルダにファイルをコピーするのは、ニューラルネットワークコンソールにまかせる必要がある
ということです。
今回は、{ワークフォルダ}の下に適当なフォルダを作ります。
今回は、「bokudata」にしました。
ニューラルネットワークコンソールで新規データ・セット作成
ニューラルネットワークコンソールを立ち上げます。
そして、DATASETを開き、「+ Create Dataset」ボタンを押します。
Create Dataset
ここで必要な項目を入力します。
簡単に解説しておきます。
Source Dir
:ダウンロードしたデータを置いたフォルダを指定します。
:今回の場合、c:\tmp\bokudata です。
Output Dir
:処理済のデータを出力するフォルダを指定します。
:今回の場合、{ワークフォルダ}\bokudataです。
:Source Dir と Output Dir は必ず別のフォルダでないとエラーになります。
Shaping Mode
:画像を指定したサイズにあわせる方法を指定します。
:以前はトリミングとパディングだけでしたが、ReSizeが追加されました。
: よほどのことが無い限り、ReSizeでいいと思います。
Output Color Ch
:今回はモノクロデータなので、「1」です。
:カラー画像の場合は「3」に変更します。
Output Width
:出力画像の横幅です。今回は「28✕28」ですから、28です。
Output Height
:出力画像の縦幅です。今回は「28✕28」ですから、28です
Shuffle the order of the data
:デフォルトのまま(ON)にします。シャッフルしてくれます。
File Name
:後で識別しやすい名前に変更します。
Ratio (%)
:ここで指定した比率で、学習用データとテスト用データに振り分けてくれます。
:学習用 75 テスト用 25 くらいが適当じゃないですかね。
:ここを変更する時は、合計100になるように注意します。
入力できたら、「Apply」ボタンを押します。
しばらく、こんな感じの画面がでてきますけど、待ちます。
処理が終わると、こんな感じでプレビューされます。
テキストデータを扱う時には、パスと正解ラベルを書いたCSVデータを、自分で作らないとダメだったのですが、画像の場合は、そのファイルもニューラルネットワークコンソールが自動生成してくれます。
ここまでで、データ・セットの作成手順は終わりです。
以降は、追加したデータ・セットを新規プロジェクトで使って、ちゃんと学習・評価できるかを見ていきます。
新規プロジェクト作成
まず、確認用のプロジェクトを作ります。
動作確認するだけなら、すでに作成済のプロジェクトやサンプルプロジェクトのデータ・セットだけ差し替えるだけでも可能です。
なんですけど、今回は新規に作ったものでしてみます。
PROJECTを開いて、「New Project」ボタンを押します。
浅いCNNモデルを定義
以下の順番でレイヤーをドラッグ&ドロップして、Shift+クリックで線でつなぎます。
- input
- convolution
- ReLU
- MaxPooling
- convolution
- ReLU
- MaxPooling
- Affine
- Sigmoid
- BinaryCrossEntropy
超シンプルなCNN(Convolution Neural Network)です。
とりあえず、この辺で一回名前をつけて、プロジェクトを保存しておきます。
名前は自分がわかりやすければ、なんでもいいので、適当につけて・・っと。
今回は、保存先も{ワークフォルダ}の下に適当なフォルダをつくって置くことにしてます。
さて、保存できたら、設定していきます。
DATASETタブ
まず、DATASETタブを開きます。
右上の「Open dataset」ボタンを押し、表示された選択肢の中から、TrainingとValidationにそれぞれ、さきほど生成時に入力したCSVファイル名をさがして割り当てていきます。
正しく割当できていれば、Trainingが2640件、validationが880件になっているはずです。
EDITタブ(各レイヤーの設定)
続けて、各レイヤーを設定していきます。
今回はわざとデフォルトの設定にあわせて、データを作成しているので変更はいりませんが、サイズ等を変更した場合は、画像にあわせて変更する必要があります。
Convolutionレイヤーの初期値変更
Convolutionレイヤーは2つとも、W.initializerを「NormalAffineHeForward」に変更しておきます。
理由がわからない場合は、こちらの記事も見てください。
AffineのOUTPUTサイズ
次にAffineのOUTPUTを、デフォルトの100から1に変更します。
これをせず、デフォルトの100のままでもエラーにはならないですけど、正確さが20%とか30%とかに落ちてしまったりします。
学習実行
この設定で学習をやってみます。
何かいい感じのきれいな学習曲線になってます。
評価の実施
続けて、評価もやってみます。
99.2%!上出来です。
まあ、MNISTと同じようなデータをアルファベットで作ってみた・・というだけなので、結果がこうなるのは当然なのですがね。
ただ、作成した独自画像データ・セットが使えて、かつ、DATASETへの追加手順も間違ってはないようだということで、めでたし、めでたしです。
ではでは。
2017/12/01追記
Version1.10で主にこの部分のアイコンのデザインが変わってます。