データセットの準備

Friday, November 03, 2017

App

Posted by Yoshiyuki Kobayashi

データセットとは、ニューラルネットワークの学習や性能評価に用いるデータの集まりです。

 

ご参考

Neural Network Consoleに含まれるサンプルプロジェクトを用いることで、ひとまずデータセットを作成することなく学習を試すことができます。サンプルデータセットを用いた学習を行う方法についてはチュートリアルをご参照ください。本節では自分でデータセットを作成する方法について解説します。

 

ご参考

Neural Network Consoleは、画像カテゴリ毎にフォルダ分けされた画像を元に、画像分類用データセットを作成する機能を備えています。本機能については「画像カテゴリ毎にフォルダ分けされた画像を元に、画像分類用データセットを作成するには」をご参照ください。

 

 

Neural Network Consoleは、Neural Network Consoleの定めるCSV(カンマ区切りのテキスト)フォーマットのデータセット形式に対応しています。本データセット形式は、画像認識機の学習に用いられる画像入力-ベクトル出力形式、画素毎の認識や画像フィルタの学習に用いられる画像入力-画像出力形式、その他の任意のベクトルもしくは行列データを元にした認識機の学習に用いられる行列入力-ベクトル出力形式などに幅広く対応します。

 

Neural Network Consoleで学習を行うには、学習用データセット、評価用データセットの2つのデータセットを用意します。学習用データセットはニューラルネットワークの学習に用いられるデータセットです。評価用データセットは学習には用いられず、精度評価のためのみに用いられます。学習用データセット、評価用データセットのファイルフォーマットは共通です。

 

1 データセットの基本構成

データセットのCSVファイルは、ヘッダを表す1行目と、データを表す2行目以降で構成されます。

 

1.1 ヘッダ

1行目のヘッダの各セルは、CSVファイルの各列のデータの変数名、次元インデックス、コメントを示します。ヘッダの各セルの値は、変数名[__次元インデックス][:コメント]で表します。

 

変数名はNeural Network Console内での識別に用いる変数名を表します。変数名には任意の文字列を利用することができますが、通常入力データにはx、出力データにはyを割り当てます。入出力が複数ある場合はそれぞれx1、x2…、y1、y2…のように、x、yの後に数字を付加して区別します。yはxより右側の列に、x、yそれぞれの中では添え字が大きい変数ほど右側の列に配置します。

 

次元インデックスは、ベクトルの形をした変数である場合に、CSVの各列がベクトルの何次元目であるかを示します。次元インデックスは、変数名に続けて__(ダブルアンダースコア)と数字で表します。インデックスは0から始まり、例えば10次元のベクトルであれば0~9の値を取ります。

 

コメントは、各変数もしくは変数の各次元の分かりやすい名前を示します。コメントには変数名とは異なり、特に制約なくユーザに理解しやすい任意の文字列を割り当てることができます。

 

ご注意

Neural Network ConsoleはCSVファイル内のスペースを通常の文字として扱います。カンマの後などに余計なスペースを挿入しないようご注意ください。

 

ご注意
Neural Network ConsoleはBOM付きのUTF-8フォーマット、UnicodeフォーマットのCSVファイルには対応していません。

 

ご注意
Neural Network Consoleは日本語などの2バイト文字に対応していません。CSVファイル内に2バイト文字が含まれることのないようご注意ください。

 

1.2 データ

2行目以降の各行は、1つのデータを示します。例えば2行目以降に1000行を持つ1001行のCSVファイルは、1000個のデータを含みます。1つのデータはヘッダで指定した複数の変数で構成されます。2行目以降の各セルには、変数の種類に応じてファイル名もしくは数値が入ります。

 

変数が画像データである場合は、各セルに画像ファイル名を入力します。ファイル名には絶対パス、もしくはデータセットCSVファイルからの相対パスを利用することができます。Neural Network Consoleは拡張子が.png、.jpg、.jpeg、.gif、.bmp、.tifであり、Color Channel数が1(グレースケール)もしくは3(RGB)である画像ファイルに対応しています。コアライブラリ内部において画像は各次元の要素数が(Color Channel数,Height,Width)である配列として扱われます。

 

変数が画像以外のベクトルもしくは行列である場合、各セルにはデータCSVファイルのファイル名を入力します。データCSVファイルはデータセットCSVファイルとは別にデータ毎に用意するCSVファイルです。データCSVファイルはヘッダを持たず、数値セルのみで構成されます。Neural Network ConsoleはCSVファイルを要素数が (行数,列数)である配列として扱います。

 

ご注意

1つのデータセットCSVファイルに含まれる同じ変数は、全て配列の要素数が同一である必要があります。たとえば、同じ変数xの画像としてColor Channel数, Width, Heightが異なるものを混在させることはできません。このような場合は、事前に全ての画像の解像度を統一する前処理(リサイズ等)を行っておく必要があります。

 

ご参考

作成したデータセットが正しいデータセットフォーマットであるかどうかは、Neural Network Consoleのデータセットタブでデータセットを読み込んだ後、右クリックメニューのCheck Consistencyを選択することで確認することができます。詳しくはデータセットの整合性を確認するにはをご参照ください。

 

ご参考

Neural Network Consoleでは、与えられた学習データセットの先頭から順にデータを読みながら、コンフィグタブのBatch Sizeで与えた数のデータ(Mini-Batch)を1つの単位としたミニバッチ勾配降下法によるパラメータの最適化を行います。この際、効率的な最適化のためには1つのMini-Batchに含まれるデータはできるだけバリエーション豊かであることが理想的です。データセットCSVファイルの各行はあらかじめシャッフルしておくことをお勧めします。

 

ご参考
安定したニューラルネットワークの学習のためには、実数値はおおむね-1.0~1.0の間に収まるように事前に加工しておくことをお勧めします。

 

2 画像認識用データセットの例

以下のフォルダに作成されるMNIST手書き数字認識のサンプルデータセットを元に、画像認識機の学習に用いるデータセットのフォーマットについて解説します。

 

samples\sample_dataset\mnist\mnist_training.csv

(※このファイルはMNISTデータセットを用いるいずれかのサンプルプロジェクトの読み込み時に自動生成されます。ファイルが存在しない場合は01_logistic_regresionなどのサンプルプロジェクトを読み込みます。サンプルプロジェクトの読み込みについてはチュートリアルをご参照ください)

 

このデータセットは、数字が書かれた28×28のモノクロ画像と、各画像が「0」~「9」のいずれの数字であるのかを示すラベルデータから構成されています。

 

x:image y:label
./training/5/0.png 5
./training/0/1.png 0
./training/4/2.png 4
./training/1/3.png 1
./training/9/4.png 9
./training/2/5.png 2
./training/1/6.png 1
./training/3/7.png 3
./training/1/8.png 1

 

1行目、1列目のx:imageは、1列目の変数名がxであることを示します。1行目、2列目のy:labelは、2列目のデータの変数名がyであることを示します。

 

2行目以降の各行は、1行ごとに1つのデータ示します。1列目は入力であるxの画像ファイル名(CSVファイルからの相対パス)を、2列目は正解カテゴリのIndexを示します。MNISTデータセットでは認識対象の数字は0~9の10種類であるため、カテゴリIndexはそれぞれ数字の「0」~「9」に対応する0~9の値をとります。例えば1列目で与えられた画像が数字の「5」である場合、2列目には数字の「5」に対応するカテゴリIndexである5が指定されています。

 

MNISTデータセットにおいて変数xの示す画像データファイルは28×28のモノクロ画像であるため、Neural Network Console上でのxの配列のサイズは(1,28,28)になります。変数yの示すデータは1次元の値であるため、yの配列のサイズは(1)になります。