FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

CNTKのSimple2dに対して別のデータセットを与えて特徴を掴む(はずが謎が深まる)

仕事をしながら考えていたのだが、前回のSimple2dの問題は、0と1に分類するときに、どの程度の確率で0と1に分類されるかについて示されているんじゃないかと思った。

という訳で、もう一度データを見ながらリトライしてみよう。

注意: この記事は機械学習初心者が試行錯誤した記事です。本文には誤った情報が含まれている可能性があります。

データを3Dで出力する。

トレーニングデータの観察

まず、訓練データについて、再度3Dでしっかり観察してみよう。使ったのは、gnuplotだ。

splot "SimpleDataTrain.txt"

f:id:msyksphinz:20160129231318p:plain

うん、見事に0と1に分類されている。XとYの座標に対し、Zが0と1に分類されているデータとなる。 これを、ニューラルネットワークに通す。最初の定義では、入力が5であり、5回の中間層を通って、2つの出力、つまり0と1のどちらに分類されるのかを決定するのであろう。 そうすると、ニューラルネットワークの図は以下になるであろうと想像する。この学習データから、次にテストデータがどのような結果になったのか見てみよう。

テストデータの観察

テストデータは、SimpleDataTest.txtだ。データフォーマットについては、 [X座標, Y座標, 回答(誤差を計算するため)] だと思われる。この3値をそのままGnuplotに出力すると、プロットされるのは回答(Z値に相当)だ。ちゃんと、トレーニングデータに沿った分類結果が回答として入力されている。

f:id:msyksphinz:20160129231943p:plain

テストデータから、分類結果を出力する

これが前回の、command=Simple_Demo_Outputだ。この結果、0に分類されるか、1に分類されるかの確率(比率)が出力されるとするならば、各軸をgnuplotで出力してみれば良い。

f:id:msyksphinz:20160129232547p:plain

おお、何となく意味が通じるんじゃないか?ある程度、データが0と1に分類されている。

これって本当なんだろうか?新しいデータセットを作って試してみようじゃないか?

別のデータセットを用意して分類に挑戦

まずは新しいデータセットを100000個ほど生成し、特定の規則によって0と1に分類されるようにする。 だいぶ省略しているが、プロットデータは以下のようになる。

f:id:msyksphinz:20160130002415p:plain

局所的にデータが1になったり0になったり、って感じだ。

これをトレーニングさせて、さらにテストデータを抽出してみる。やり方は上記とまったく同じで、データセットが異なるだけだ。ただし、今回は全体にテストデータの座標を散らばせている。

  • テストデータの値
[X座標、Y座標、値]
-7.878702 4.909430 0
1.446271 -0.835176 0
-2.305882 -4.520214 0
3.359248 -2.090500 1
-4.368542 5.598394 0
1.981883 -7.541073 1
-2.208519 9.499767 1
-0.648022 -7.196572 0
-9.158628 4.559925 0
2.312110 8.054642 0
2.452668 -4.797566 1
1.110354 -1.900270 0
-7.164883 1.554927 0
0.530425 8.771382 0
9.177576 9.688636 0
...

これに対して、結果は以下のようになった。

19.8743 -18.449
5.45226 -3.82612
10.8099 -9.48674
-5.79303 7.33916
5.24297 -3.73486
-5.36912 6.86374
-5.3498 6.89128
4.17675 -2.80384
22.6939 -21.2914
10.2059 -8.50689
-6.17231 7.69031
0.0087567 1.54677
24.3107 -22.9085
4.6912 -3.04885
12.0003 -10.2779
13.4469 -12.1834
...

うまくいっていない気がする?

あれー?トレーニングデータに対して、結果が[0, 1]にそれぞれマッピングされる確率だとしたら、これ逆になってないか?実際、テストデータに対して結果の値が逆相で登場してしまった。

f:id:msyksphinz:20160130002848p:plain

こんな感じ。見事に逆位相になってないか?一方で、逆にマッピングされる確率だとすると、ぴったり一致するのが奇妙だ。

f:id:msyksphinz:20160130003100p:plain

結論

CNTKまだ謎なところ多すぎいい!

過去のCNTKの記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

続きの記事

msyksphinz.hatenablog.com