2016/03/26

[DL][cntk]NDLを書いてみよう (1)

Deep Learningというよりも、MicrosoftのCNTKの話になっているので、ラベルを追加した。

さて、前回まではSimpleNetworkBuilderという標準のネットワークを使っていたのだけど、どういじってもあまり代わりばえしないので、何というか達成感が少ない。
じゃあ、次はネットワークを自分で組んでみるか、というところだった。

 

Tutorial · Microsoft/CNTK Wiki
これが、一番最初のチュートリアルだ。
長い・・・・。
これまでやってきてようやく、自分が理屈をわかっていない、ということがわかってきた。
理屈というか、統計に関する基礎がないので、たぶん意味がある説明であっても読み流したりしているのだと思う。

たとえば、このチュートリアルの最初に「Logistic Regression」というのがある。
Logisticといえば、私にとってはロジスティック関数しかなく、ロジスティック関数と言えば活性化関数の1つ、という認識だ。
しかし、ここはRegression。
リグレッションというと、よくテストで出てくる「修正したことによって前OKだったところがNGになってないかもう一度やってみよう」の退行テストくらいでしか聞いたことがない。

“logistic regression”で検索すると、どうも「ロジスティック回帰」ということらしいのだが、それが何だかわからない。
統計の話で、モデルとか何とか。。。

以前、活性化関数の選び方を調べていたけど、順番としてはそうではなく、解析方法だかなんだかが「ロジスティック回帰」だからとか、そういう理由で決まっていくのだろうか?

ともかく、深層学習の本にはそういったことは書かれていなかったので、もっと知識があればわかってくるのかもしれない。
とりあえず「理解できて当然なのにわかってない」という訳ではなさそうで安心した。


そういうのもいずれは調べるとして、まずNDLのサンプルをSimple2dで試してみよう。
やるのは、Simple.cntkのSimpleNetworkBuilderのところを、これに置き換えるだけだ。

うん、実行するとエラーになった。
ラベルの次元がreaderとあってない、ということらしい。
readerのlabelsの中を見ると、dimは1なのだが、labelDimは2になっている。
ネットの方はLDim=1になっているから、LDimとlabelDimが同じ次元じゃないといけないのかな。
LDim=2にすると、最後まで行った。

ラベルって、SoftMax関数とかで最後に分類する数のことだよな?
MNISTだったら数字が10個あるので、10次元になるのか。
じゃあ、このサンプルが1次元というのはどういう意味なのだろう・・・。
せめて2つには分類しそうなものだが。

 

できたのは、こういうネットワークとのこと。

image

最後はSoftMaxじゃなくてLogisticで終わるんだが、どういうことなんだろう?
しかも、その前にSigmoidがあるから、このLogisticは活性化関数のことではない??
章のタイトルも「Logistic Regression」だから、分類分けするのではなくて、ロジスティック回帰というものをやるサンプルと言うことなのかな。

 

なんかもう、ちょっとやっただけでこんなにぼろが出るとは・・・。
まあいい、まだわかってないだけだ(強がり)。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。