とりあえず前回までにCNTKのインストールは完了したので、サンプルを見ながら何が出来るのか、調査していこう。
目次
- 目次
- Simple2dをCNTKで実行する
- トレーニングファイルについて
- テストデータについて
- Simple_Demo_Outputでトレーニングの結果を出力する。
- ちなみに
- 過去のエントリ
- 続きのエントリ
まずは、最初の例としてSimple2dという、アプリケーションが紹介されている。
なんだか、何をするためのアプリケーションか良く分からないね。とりあえず、コードを走らせながら読み解いていこう。
Simple2dをCNTKで実行する
以下で実行できる。
cntk configFile=../Config/Simple.config
何が起きているのか?
まずは、Simple.configを見ていこう。開いてみると分かるのだが、これ、普通のプログラミング言語じゃない。 明らかにDSLで書かれている。これを読み解いていくのは至難の技だぞ。。。
... ConfigDir = "$RootDir$/Config" DataDir = "$RootDir$/Data" OutputDir = "$RootDir$/Output" ModelDir = "$OutputDir$/Models" # deviceId=-1 for CPU, >=0 for GPU devices, "auto" chooses the best GPU, or CPU if no usable GPU is available deviceId = -1 command = Simple_Demo_Train:Simple_Demo_Test precision = "float" traceLevel = 1 modelPath = "$ModelDir$/simple.dnn" outputNodeNames = ScaledLogLikelihood ####################################### # TRAINING CONFIG # ####################################### Simple_Demo_Train = [ action = "train" ...
ちなみに、このモデル言語のリファレンスは、パッケージリリースの方にWordファイルが置いてあった。
これは読むのがしんどい。
Simple2dのサンプルで実行しているのは、CNNの構築
このサンプルでは主に2つのフェーズから成り立っているようだ。まず1つめはSimple_Demo_Train。これはネットワークに対してトレーニングデータを流して訓練をする。 さらに、トレーニング結果に基いてテストを流すのがSimple_Demo_Test。 さらに、本文ではあまり解説されていないがSimple_Demo_Outputというフェーズも存在する。これは実際にネットワークにデータを流して結果を出力するのだが、テストデータと同じものを活用している。
トレーニングファイルについて
トレーニングファイルであるSimpleDataTrainingは、3つの値を1つのグループにして格納されている。
0.55722 0.820464 0 -0.841446 0.336962 0 -0.51575 0.563136 0 -0.0891501 0.824556 0 -0.0696117 -0.6043 1 0.778311 0.433997 0 -0.461137 -0.573202 1 -0.750289 0.419899 0 ...
X,Y座標、そして分類値だろうか。これらは1万行近くあり、Excelにプロットしてみると以下のようになる。
何となく0,1で分類されているな、っていうのは分かった。
テストデータについて
これが良く分からん。同様の表現法を取っているならば、(ソースコードとしてはそうとしか読めない)、1行目がX軸で2行目がY軸? 3行目が模範解答として、エラー率を測っているのか?
######################################## # TEST RESULTS # # (computes prediction error and # # perplexity on a test set and # # writes the output to the console.) # ######################################## # Parameter values for the reader reader = [ readerType = "UCIFastReader" file = "$DataDir$/SimpleDataTest.txt" randomize = "none" features = [ dim = 2 // これは入力データが2次元であることを示す。 start = 0 ] labels = [ start = 2 // 最初の2つのデータ(実際には2次元データ)をスキップして、 dim = 1 // 分類値は1次元で labelDim = 2 // 2種類の値を取る labelMappingFile = "$DataDir$/SimpleMapping.txt" ] ]
同じ理屈でExcelに載せてみると、以下のようなテストデータを渡しているに等しい。
何かデータとしては極端な気がするよね。よう分からん。
Simple_Demo_Outputでトレーニングの結果を出力する。
新しいフェーズを加えて、テストの結果を出力してみる。以下のようにcommandを追加する。
cntk configFile=../Config/Simple.config command=Simple_Demo_Output
出力されたファイルは、../Output/SimpleOutput.ScaledLogLikelihood だが、これが2つの値をペアにしたものになっている。2値分類なら1つの値になっていると思ったんだけどなあ。
-3.55165 4.78638 -3.52765 4.76299 -3.50334 4.73932 -3.47874 4.71534 -3.45384 4.69108 -3.42863 4.66651 -3.40312 4.64165 -3.37729 4.61647 -3.35114 4.59099 -3.32468 4.5652 -3.2979 4.53909 -3.27079 4.51266 -3.24336 4.48592 -3.21559 4.45885 -3.1875 4.43146 -3.15907 4.40374 -3.1303 4.37568 -3.10119 4.34729 ...
ここらへんは、もうちょっと調査が必要だ。
ちなみに
チュートリアルも含め、このSimple2dの解説は以下のPDFにも載っている。ただし説明が少なく初学者の僕には理解不能なところが多いので、誰か解説頼む。。
http://research.microsoft.com/pubs/226641/CNTKBook-20160121.pdf
どうやったらこの図が出てくるの。。。