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

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

オリジナルテキストデータで新規プロジェクト追加:使い方3/ソニーニューラルネットワークコンソール

オリジナルのテキストデータ(CSV)を使って新規データ・セットを作成し、それを使って学習する新規プロジェクトを作ってみます。

 

今回は、システムがあまり得意で無い方には、若干、難しいかもしれませんけれど、ご勘弁を。

 

でも、せっかく深層学習(ディープラーニング)を試すのですから、自分で作ったオリジナルデータで学習・評価させてみたいと思うこともありますから、やっぱり、避けては通れないです。

 

今回はテキストのCSVデータを使います。

 

わりと本とかネットの関連記事でも、画像データを使う例は紹介されてますけど、テキストのCSVデータで学習・評価するのは、あまり見かけません。

 

でも、うまくデータを作れば、例えば、アンケートの結果から有望な顧客かどうかを判定するとか・・みたいな応用ができるので、結構、ビジネスの世界で使えると、個人的には思ってるんですよね。

 

だから、今回はまずテキストCSVデータでやってみます。

 

オリジナル画像データでやる方法は、また後日、記事にしようと思います。

2017/9/13追記

画像版も記事にしました。

arakan-pgm-ai.hatenablog.com

 

まず、元データを作る

 

とりあえず、EXCELで適当なデータを作って、CSVで保存します。

 

まず、元にするデータはこんな感じを使います。

f:id:arakan_no_boku:20170821211010j:plain

 

かなり適当なデータですが、身長・体重・腹囲をインプットにして、標準かデブかを出力にするものです。(ほぼ、意味はないですが・・笑)

 

なお、意味ありげなヘダー項目名になってますが、このヘダー名は使いません。

 

さて、ここからが結構大変です。

 

上記をCSVファイルで保存すればいいだけじゃないか?と思ってしまうのですが、とんでもないです。

 

まず、この元データから、データ・セット用CSVと、データCSVの2種類を作る必要があります。

 

データ・セット用CSVは、例えばこんな感じです。

f:id:arakan_no_boku:20170822224832j:plain

 

1行目がヘッダ行、2行目以降がデータ行なんですけど、左側は入力用のデータCSVのファイル名をフルパスで書いているだけです。 

 

そして右側が出力(つまり、正解)です。

 

今回は、ノーマルが0、デブが1としてみました。

 

ヘダーのフォーマットは、「変数名[__次元インデックス][:ラベル名]」なんですが、今回はテキストデータなので次元インデックスは不要です。

 

変数名は、入力側が「x」、出力側が「y」を、固定で使うのが推奨です。

 

なので、ラベル名を適当につけて、「x:data」「y:label」としています。

 

上記を見れば、わかると思いますが、データ用CSVは入力データの身長・体重・腹囲の部分を、1行1ファイルでCSVデータを作成しないといけません。

 

なおかつ、値は「おおむね-1.0~1.0の間」になるように加工しておかないとだめみたいなのですね。

 

マニュアルではこうなっていますから。

変数が画像以外のベクトルもしくは行列である場合、各セルにはデータCSVファイルのファイル名を入力します。

データCSVファイルはデータセットCSVファイルとは別にデータ毎に用意するCSVファイルです。

データCSVファイルはヘッダを持たず、数値セルのみで構成されます。

Neural Network ConsoleはCSVファイルを要素数が (行数,列数)である配列として扱います。

実数値はおおむね-1.0~1.0の間に収まるように事前に加工しておく必要があります。

 

だから上記のデータは、以下のように1000で割った数字に加工して、それを1行1ファイルで保存してやらないといけないわけです。

f:id:arakan_no_boku:20170822005227j:plain

 

これをさらに、学習用と評価用の2種類のセットを作らないといけません。

 

今回は、学習用で1500件、評価用で500件作りました。

 

さすがに手作業はしんどすぎるので、EXCELでこんな感じのマクロを書いて、無理やりBOM無しUTF-8CSVファイルに分割しました。(BOM付きUTF-8だと、エラーになります。SJISで駄目なのか?は試してません)

 

やってることは、A2セルからデータがある最下行まで、1行ずつ、3つのセルの値をカンマでつないで、1ファイルずつ出力しているだけです。

 

EXCELでただ書き出すと、BOM付きになってしまうので、途中でBOMコードを省く処理がはいっているのでごちゃごちゃしてますが・・。

Sub dataCreate()
     Dim wkst
     Dim obj As Object
     wkst = "forward01"
     bottom = Range("A2").End(xlDown).Row
     For r = 1 To bottom - 1
           out = Worksheets(wkst).Cells(r + 1, 1).Value & "," & Worksheets(wkst).Cells(r + 1, 2).Value & "," & Worksheets(wkst).Cells(r + 1, 3).Value
           datFile = ActiveWorkbook.Path & "\" & r & ".csv"
           Set obj = CreateObject("ADODB.Stream")
           obj.Charset = "UTF-8"
           obj.Open
           obj.WriteText (out)
           obj.Position = 0
           obj.Position = 3 
           Set w = CreateObject("ADODB.Stream")
            w.Type = adTypeBinary
            w.Open
            obj.copyTo w
           obj.Close

            w.SaveToFile datFile, 2
             w.Close
       Next
End Sub

 

データ・セット用ファイル名は、学習用を「learn01.csv」、評価用を「forward01.csv」にとりあえずしときました。

 

あと、テキストエディタ(メモ帳以外。メモ帳はBOM付きになるので駄目です)で、UTF-8コードに変換して保存しておきます。

 

なお、データ・セット用CSVは、両方とも、ニューラルネットワークコンソールをインストールしたフォルダにある、samplesフォルダの下のdatasetフォルダに、適当なフォルダをつくって、そこに置く方がいいです。(上図のサンプルのパスはデタラメなので参考にしないでくださいね)

 

他の場所においてると、何故か、アクセス権限がない・・みたいなエラーをはいて止まることがあるので、それが一番面倒が少ないです。 

 

DATASETとして取り込む

ニューラルネットワークコンソールを起動します。

 

DATASETタブを開き、OpenDatasetを押します。

f:id:arakan_no_boku:20170821211524j:plain

 

ファイル選択ダイアログが開きます。

 

さきほどUTF-8で保存したデータ・セット用CSVファイルを選択して開きます。

f:id:arakan_no_boku:20170821213109j:plain

 

データ・セット一覧に取り込まれました。

f:id:arakan_no_boku:20170821214446j:plain

 

今は、learn01.csv・・つまり、学習用のCSVを取り込みました。

 

続けて同じ要領で、学習用のCSVを取り込んでおきます。

 

 

新規プロジェクトを作る

 PROJECTタブを表示させて、「New Project」を選択します。

f:id:arakan_no_boku:20170821215941j:plain

 

新規プロジェクト画面が開きます。

 

初期データとして、MNISTのデータがセットされているので、右上のDATASETボタンを押して、データ・セットの入れ替えをします。

f:id:arakan_no_boku:20170821221347j:plain

 

DATASET画面の左側のACTIONで「Add」を選択して、データ・セットを2つ追加します。

 

名前を「trainning-csv」と「validation-csv」とでもしておきます。

f:id:arakan_no_boku:20170821222245j:plain

 

追加した「trainning-csv」(1500件の方を紐付ける)は、MAINとShuffleのみにチェックをつけます。

f:id:arakan_no_boku:20170821222721j:plain

 

もうひとつの「Validation-csv」の方を選択し、Shuffleのみにチェックをつけます。

f:id:arakan_no_boku:20170821222812j:plain

 

ここまでできたら、初期にセットされていたデータ・セットはいらないので、Deleteで消します。(別に残してても問題はないですが)

f:id:arakan_no_boku:20170821221810j:plain

 

作成したデータ・セットに、先程追加したCSVデータを紐付けます。

 

「trainnig-csv」の方を選択して、右上の「Open Dataset」ボタンを押して、一覧を表示して、さっき追加した1500件の方のファイル「learn01.csv」を選択します。

f:id:arakan_no_boku:20170821225908j:plain

 

同じようにして、もう一つの方に500件の方のデータ「forward01.csv」を紐付けます。

 

かならず、プレビューして、内容が正しいか確認してください。

 

今度は、COFIGボタンを押して、設定画面を開きます。

f:id:arakan_no_boku:20170822010234j:plain

 

Optimizer、train_error タブの、Dataset項目を、さきほど登録した学習用のデータ・セット名に書き換えます。(今回なら、trainning-csv

 

同様に、valid_error、ExecuterタブのDataset項目を、評価用のデータ・セット名に書き換えます。(今回なら、validation-csv)

 

今度は「EDIT」を選択します。

 

ニューラルネットワークを組みます。

 

今回は画像ではないので、CNNは不要です。

 

基本的な全結合レイヤー(Affine)にします。

 

活性化関数はReLUです。

 

左側のレイヤーの中から、以下のレイヤーを順番通りに選択して追加(ドラッグ&ドロップかダブルクリック)します。

  1. input
  2. Affine
  3. ReLU
  4. BinalyCrossEntropy

 

なお、今回はデブか否かの2値なので、BinaryCrossEntropyを使ってますが、3値以上になったら、そこはSoftmaxCrossEntropyにする必要があります。

 

f:id:arakan_no_boku:20170822230903j:plain

 

あとは、上から順番に「選択→Shiftを押しながら下のレイヤーをクリック」を繰り返して、接続していきます。

f:id:arakan_no_boku:20170822231021j:plain

 

最後に、inputレイヤーを選択して、左下に表示されるプロパティで、sizeを「1,3]と入力します。

f:id:arakan_no_boku:20170822231137j:plain

 

これはデータ用CSVの「行数、列数」です。

 

今回は、1ファイルが「1行3列」なので、1,3です。

 

データセットCSVをプレビューすると、そこに小さく、この数字がでているので、それを参考にするのが確実です。

f:id:arakan_no_boku:20170822231356j:plain

 

あと、Datasetが、x であることを確認します。

 

次に、Affineのレイヤーを選択して、outshapeを、inputにあわせて「1」にしておきます。

f:id:arakan_no_boku:20170826013324j:plain

 

デフォルトが100とかになってますから、必ず修正します。

 

これで、プロジェクトの設定は終了です。

 

まずは上書き保存をしておきましょう。

f:id:arakan_no_boku:20170822231647j:plain

 

でもって、学習です。

 

データの設定とかミスをしてたら、ここでエラーで停止しますので、エラーメッセージを見てなおすしかないです。

 

実は、ここにたどり着くのに、10回くらい、エラー停止で泣いてます。

 

ドキドキ。

 

学習ボタンを押します。

f:id:arakan_no_boku:20170822232034j:plain

 

なんとか、エラーなく終わりました。

 

次に評価をやってみます。

f:id:arakan_no_boku:20170822232221j:plain

 

おお!

 

Accuracy(正確さ)が98.59%です。

 

めちゃくちゃ、上出来じゃないですか。

 

とりあえず、CSVデータで独自のデータ・セットを作って、新規にプロジェクトを作る手順は、こんな感じでいけるみたいです。

 

関連記事

arakan-pgm-ai.hatenablog.com

arakan-pgm-ai.hatenablog.com

f:id:arakan_no_boku:20170910161122j:plain