暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Coursera Machine Learning Week5 2周目⑮ Gradinent Checking-後半-

Gradient CheckingをWeek5ではなくWeek3やWeek4の課題で使う練習をしたいと思います。

 

まずはWeek3の課題のwithout regularizationでやってみます。

100人の受験者のTEST1とTEST2の得点と合否がサンプルとして

与えられ、どれくらいのTEST1とTEST2だったら合格するかという

Logistic Regressionの問題でした。

 

 

thetaは3X1だったので

f:id:omoshiroamericanews:20200607214026p:plain

 

gradも3X1です↓

f:id:omoshiroamericanews:20200607214948p:plain

 

これにGradient Checkingの式を入れてみました↓

f:id:omoshiroamericanews:20200607214853p:plain

見事、左右に並びました!

左の列がGradinent Checkingで計算したgrad,

右の列がfminuncで計算したgradが並びます。

ただ、精度をはかる指標が1e-9の小ささまではいってないですね。

かなりfminuncとGradient Checkingの差は大きいという判定になりそうです。

 

 

 

with Regularizationで見てみます。

f:id:omoshiroamericanews:20200607215913p:plain

やはり精度をはかる指標が1e-9の小ささまではいってないですね。

かなりfminuncとGradient Checkingの差は大きいという判定になりそうです。

 

これはlambda=1だったので、lambda=0.1にしてみました。

 

f:id:omoshiroamericanews:20200607220103p:plain

あんまり傾向は変わらずですね。。。

 

 

続いてWeek4のOne VS Allでやってみます。

これは手書きの文字の判別でした。

5000のサンプルが与えれており、1サンプルは1X400の情報量でした。

 

thetaは401X10でした。

 

やり始めたところ計算が10分経っても終了しません。。。

 

こういうときのために評価用にSmall Neural Networkの作成が必要なんだと

実感しました。

 

ようやく計算終了しましたが、あれ!?です↓

f:id:omoshiroamericanews:20200607222757p:plain

 

Gradinent Checkingのgradは401X1となっています。

しかもerrorです。。。

f:id:omoshiroamericanews:20200607222933p:plain

 

そういえばgradも401X1になってますね。

 

f:id:omoshiroamericanews:20200607223049p:plain

 

そうかぁ、Week4のOne VS Allでは401X1のthetaをK=1のとき、K=2のとき、・・・・・K=10のときで合計して401X10にしていました。

 

今、私のたてた式だと401X1の取り出しになっていますね。

 

さらにyも1~10の間をとっているので、

 c=1で(y == c)を入れ込んで401X1を取り出すようにします。

,

f:id:omoshiroamericanews:20200608212750p:plain

うまくいきました!

しかも基準の1e-9とほぼ同じ1.76937e-09と出ました!

 

c=2でもやってみます!

f:id:omoshiroamericanews:20200608213525p:plain

うまくいきました!

 

今後、Gradientがうまくいっているかどうか迷ったら、

使えそうです!

 

別の日記でこのWeek5で学習したNeural Networkを

コロナ感染者予測に応用できないかなぁとトライしてたんですが、

このNeural Networkが合っているかどうかGradinent Checking使う

楽しみができました!

 

courseradaisuki.hateblo.jp

 

今回はここまでです。また次回頑張ります!