LoginSignup
0

More than 3 years have passed since last update.

Coursera Machine Learning Stanford Univ. Week4

Last updated at Posted at 2019-07-18

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

こんな感じでした

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0