#Week4のプログラミング課題ではまったところ
Octaveに不慣れでプログラミング課題で少し手間取ってしまいました。
とりあえず自分用のメモとして記録しておきます。
課題はmnistの手書きの数字を分別するコードを完成させること。
- 10個のRegularized logistic regressionを作る方法と
- 2つのhidden layerを持つNeural Networkでやる方法
##手間取った理由
- 課題のpdfの読み込み不足
- 課題のソースコード中にあるhintの読み込み不足
まあこれはひとえに英語力のなさによるものです。
googleさんにfmincgについて相談するとgithubに日本語訳したものをがあったので読みました。
やはり母国語で読むと見落としていた部分がすぐ見つかります。
(ちなみに私が見たものは答えそのものは暗号化?されていたのでカンニングじゃないよね?)
まあちゃんと入力データのサイズくらい確認しましょうね。
##octaveの知識不足
- pdfやソースコード中にhintにあるexampleのコードの意味を調べて時間がかかった
% [theta] = ...
% fmincg (@(t)(lrCostFunction(t, X, (y == c), lambda)), ...
% initial_theta, options);
というコメント文中のfmincgの説明これだけでも3つほど知らんことが
(@(t)(lrCostFunction(t, X, (y == c), lambda)の
-
@(t) って何
-
y==c はどうすんの
- 少し上の行のhintに説明があります。その方法はpdfに説明があります。 -
cはどこから生えてくるの?
- これも少し上のnoteにあります for loop使ってもいいよって書いてあります。 -
predict.m のmaxの使い方
max(A, [], 2) to obtain the max for each row.
-
Aの行ごとに最大の値を見つけてそのカラムの番号がpにすればいいんだけどmaxってどう使うのか知らなかったので調べるのに手間取った
-
行列計算
- 不慣れなので右からかければいいのか、左からかければいいのか、転置はいるのとか
- pdfにそういう時は行列のsizeを表示してみろと
- おお先生もそうやってデバッグしていたのかとちょっと安心
- ところでsizeってどうやって表示するの?
- size(A)とか;なしで書くとか
- octaveのGUI版でブレークポイントを設定してワークスペースにある変数の情報を見る
-そのほか
- 所謂biasがΘの最初の要素なのでこれを掛けるため入力データ1をつけ加えること
- oneVsAll.mだと下記のようにしていますこれをNeural Network版で使うpredict.mでは自分でやらないとね
% Add ones to the X data matrix
X = [ones(m, 1) X];
ex3_nnの結果は
Training Set Accuracy: 97.520000
こんな感じでした