今回はNeural Networkの課題に取り組みます
前回までで
①ビデオの振り返り -->完了
②問題文を読む -->途中
③プログラム全体ex3_nnを読む -->やってない
④プログラム詳細predict.mを読む -->やってない
の状態でした。
今までで分かっている大事な点は構造が↓であることです。
もう1つ大事な点は最適thetaは既に与えられていて計算する必要がないことです。
問題文を読み進めます。
いつもの通りXに要素がすべて1のベクトルを足すようアドバイスされています。
aは縦一列のベクトルになるよう調整しなさいというヒントに見えます。
①Ove VS allの精度は94.9%だったのですが、
Neural Networkでは97.5%の精度が出ると書いてあります。
問題文を確認し終えたのでプログラム全体ex3_nnを読んでみます。
Input Layer/Hidden Layerの数が設定されています。
ここではoutput Layer = num_labelsになります。0-9の10種類の数字ですね。
One VS Allでもあった5000のうちランダムに100取り出して
10X10で表示すると書いています。
実行するとこうなりました↓
計算されている最適thetaのThata1とTheta2をLoadしています。
予測している場所ですが、プログラム詳細predict.mが大半の仕事をしている
ことがわかります。
ここで出る精度が97.5%になれば正解のはずです。
それではプログラム詳細predict.mを見てみます。
predict.mは
Theta1とTheta2とXがあれば、pを計算するという関数になっています。
ヒントがありました。
『max』を使えとあります。
これはOne VS Allを解いたときにも出てきました↓
Coursera Machine Learning Week4 課題 2週目⑥ -苦闘記憶- One vsALL④ - 暇人日記
これでプログラム詳細predict.mを読みました。
改めて目的を振り返ると、
手書きの数字0-9の5000のデータを機械学習で判定しなさいでした。
今回はNeural Networkで解きなさいという設定です。
Neural Networkは一般にこういう構造になっています↓
どうHidden Layerを設定するのかがキーですが、
今回は問題文全体に400-->25-->10と指示されています。
ので、
1つのデータに対してはこういう構造になっていることになります。
この考えを正しいことを裏付けるのがTheta1とTheta2が
と問題文で設定されていることです。
計算するのは1つのデータではなく、5000のデータなので
構造は↑になります。
最後のOutput Layerの5000X10はOne VS Allと同じ形で
『max』を使えということので、
これ↑をしたいということだと思います。
5000X10は↓の順番に作っていくはずです。
は
Xに要素がすべて1のベクトルを追加したらA1になるとあります。
m = size(X, 1)でmは5000になるので、それを利用して
A1 = [ones(m, 1) X]
とすると最初の行は完成です。
は
A1にTheta1をかけるとZ2になるとあります。
A1は5000X401でTheta1は25X401なので転置する必要があります。
は
Z2にSigmoidに入れて要素がすべて1のベクトルを追加したらA2になるとあるんで、
A2 = sigmoid(Z2)でSigmoidに入れます。
Z2 = [ones(m, 1) Z2]で1のベクトルを追加します。
このときA2は5000X26で0と1の間にいるはずです。
プログラムを見てみました。
5000X26でした。
0と1の間にいそうです。
A3/Z3は同じ事を繰り返しですね。
A3は5000X10になります。
A3で5000X10を作った後は『max』を使いますが、
それは↓にやったことと同じですね。
Coursera Machine Learning Week4 課題 2週目⑥ -苦闘記憶- One vsALL④ - 暇人日記
A3に『max』を使ってpを作ったので見てみました↓
最初の方がすべて10なのは実サンプルと同じですね。
気になっているのは精度です。
本当にOne VS Allよりいいのでしょうか!!?
精度の検証はこの式です↓
でやったところ、
でした。
精度97.5%なので
One VSALLの94.9%より良かったです!
今回はここまでです。次回頑張ります!