Gradient Checking epsilon = 1e-4; for i = 1:n, thetaPlus = theta; thetaPlus(i) += epsilon; thetaMinus = theta; thetaMinus(i) -= epsilon; gradApprox(i) = (J(thetaPlus) - J(thetaMinus))/(2*epsilon) end; 次をチェックする gradApprox ≈ DVec
ラベル Cousera Machine Learning の投稿を表示しています。 すべての投稿を表示
ラベル Cousera Machine Learning の投稿を表示しています。 すべての投稿を表示
2016年1月1日金曜日
Cousera Machine Learning / week5-5 めも
Cousera Machine Learning / week5-4 めも
Implementation Note: Unrolling Parameters 授業メモ
function [jVal, gradient] = costFunction(theta) ... optTheta = fminunc(@costFunction. initalTheta, options) Neural Network(L-4): theta matrices (Theta1, Theta2, Theta3) D matrices (D1, D2, D3) ------------------------- thetaVec = [Theta1(:), Theta2(:); Theta3(:)]; DVec = [D1(:); D2(:); D3(:)]; ここでTheta1(:)の意味は、Theta1の各要素をすべて列にしたもの つまり octave:7> b=[1 3; 2 4] b = 1 3 2 4 があったっとき、b(:)は、次のようになる octave:8> b(:) ans = 1 2 3 4 ------- Theta1 is 10x11, Theta2 is 10x11 and Theta3 is 1x11 Theta1 = reshape(thetaVector(1:110),10,11) Theta2 = reshape(thetaVector(111:220),10,11) Theta3 = reshape(thetaVector(221:231),1,11) reshape関数は、reshape(a, size)のように書いて次のように行列の変形をできる > reshape([1,2,3,4], 2,2) ans = 1 3 2 4 --------- octave:1> Theta1=ones(10,11) Theta1 = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 octave:2> Theta2=2*ones(10,11) Theta2 = 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 octave:3> Theta3=3*ones(1,11) Theta3 = 3 3 3 3 3 3 3 3 3 3 3 > ThetaVec =[ Theta1(:); Theta2(:); Theta3(:) ]; octave:10> size(ThetaVec) ans = 231 1 ここでsizeは行列のサイズを返し、次のようになる > a=[1,2;3,4;5,6] a = 1 2 3 4 5 6 octave> size(a) ans = 3 2 octave> size(a,1) ans = 3 octave> size(a,2) ans = 2 1> reshape(ThetaVec(1:110), 10, 11) ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ---------------
2015年12月31日木曜日
Cousera Machine Learning / week4 ex3の課題めも
わからなかった点めも
oneVsAll.m - Train a one-vs-all multi-class classifier
を埋める箇所がさっぱりもってわからない。
fmincg ( @(t)(lrCostFunction(t, X, (y == c), lambda)), ...
の @(t)(lrCostFunction はいったい何をしているんだ??
>> 関数の引数に関数を渡す時には @ を付ける。
http://qiita.com/naoya_t/items/e195a05f43cab0b1ecdc
とのこと。なるほど。
しかし、@(t), lrCostFunction(t は何??
よくわからない。。。
predictOneVsAll.mの max(A, [], 2)について
http://www.obihiro.ac.jp/~suzukim/masuda/octave/html/octave_94.html
max (x, y, dim)
[w, iw] = max (x)
引数としてベクトルを渡すと,その要素の最大値を返す。 行列を渡すと,各列ごとに最大値を返すので,結果は行ベクトルとなる。 dim を指定すると,その次数を指定することができる。
2つの行列(あるいは行列とスカラ)を渡すと,対で比較した結果を返す。
1つの入力に対して2つの返り値を受け取るとき,
例)
[x, ix] = max ([1, 3, 5, 2, 5])
x = 5
ix = 3
predictOneVsAll.mの predictOneVsAll(all_theta, X)では、sigmoid(X * all_theta')を最大にするる
index(kabel)を求めればよいか。
oneVsAll.m - Train a one-vs-all multi-class classifier
を埋める箇所がさっぱりもってわからない。
fmincg ( @(t)(lrCostFunction(t, X, (y == c), lambda)), ...
の @(t)(lrCostFunction はいったい何をしているんだ??
>> 関数の引数に関数を渡す時には @ を付ける。
http://qiita.com/naoya_t/items/e195a05f43cab0b1ecdc
とのこと。なるほど。
しかし、@(t), lrCostFunction(t は何??
よくわからない。。。
predictOneVsAll.mの max(A, [], 2)について
http://www.obihiro.ac.jp/~suzukim/masuda/octave/html/octave_94.html
max (x, y, dim)
[w, iw] = max (x)
引数としてベクトルを渡すと,その要素の最大値を返す。 行列を渡すと,各列ごとに最大値を返すので,結果は行ベクトルとなる。 dim を指定すると,その次数を指定することができる。
2つの行列(あるいは行列とスカラ)を渡すと,対で比較した結果を返す。
1つの入力に対して2つの返り値を受け取るとき,
max関数は,最大値に対応する要素の位置も返す。例)
[x, ix] = max ([1, 3, 5, 2, 5])
x = 5
ix = 3
predictOneVsAll.mの predictOneVsAll(all_theta, X)では、sigmoid(X * all_theta')を最大にするる
index(kabel)を求めればよいか。
論理演算のめも
Cousera Machine Learning / week4 Examples and Intuitions I, II
に出てきた論理演算のめも
A|B| A AND B
0|0| 0
1|0| 0
0|1| 0
1|1| 1
A|B| A OR B
0|0| 0
1|0| 1
0|1| 1
1|1| 1
A| Not A
0| 1
1| 0
A|B| A NOR B ==> (Not A) AND (Not B)
0|0| 1
1|0| 0
0|1| 0
1|1| 0
A|B| A XOR B
0|0| 0
1|0| 1
0|1| 1
1|1| 0
A|B| A XNOR B
0|0| 1
1|0| 0
0|1| 0
1|1| 1
A|B| A AND B
0|0| 0
1|0| 0
0|1| 0
1|1| 1
A|B| A OR B
0|0| 0
1|0| 1
0|1| 1
1|1| 1
A| Not A
0| 1
1| 0
A|B| A NOR B ==> (Not A) AND (Not B)
0|0| 1
1|0| 0
0|1| 0
1|1| 0
A|B| A XOR B
0|0| 0
1|0| 1
0|1| 1
1|1| 0
A|B| A XNOR B
0|0| 1
1|0| 0
0|1| 0
1|1| 1
Cousera Machine Learning / week3 ex2の課題めも
わからなかった点めも
sigmoid.m - Sigmoid Function のコードを埋める箇所がどうもよくわからない。
g = 1./(1+exp(-z));
とドット"."をなぜここに入れる?
zが行列で要素のみ演算させるのはわかるが、 なぜ、g = 1./(1+exp(-z.)) や、g = 1/((1+exp(-z.)).)でないのか。
>>追記
for ループを使うと次と同じ。
for i=1:size(z,1),
for j=1:size(z,2),
g(i,j) = 1/(1+exp(-1*z(i,j)));
end
end
sizeは行列のサイズを返し、次のようになる
> a=[1,2;3,4;5,6]
a =
1 2
3 4
5 6
octave> size(a)
ans =
3 2
octave> size(a,1)
ans = 3
octave> size(a,2)
ans = 2
2015年12月27日日曜日
Octave でのcsvファイル読込み
Cousera Machine Learning / week1 QUIZ Linear Regression with One Variable の問題2.で調べるのに使った。 問題はRetake毎に変わるようだ。 次のcsvファイルがあるとき $ cat week2q2.csv 1,-890 2,-1411 2,-1560 3,-2220 3,-2091 4,-2878 5,-3537 6,-3268 6,-3920 6,-4163 8,-5471 10,-5157
次のように読み込む
octave:1> M=csvread('week2q2.csv')
M =
1 -890
2 -1411
2 -1560
3 -2220
3 -2091
4 -2878
5 -3537
6 -3268
6 -3920
6 -4163
8 -5471
10 -5157
赤色「r」のマーカー「+」でプロット。
octave:2> plot(M(:,1),M(:,2),'r+')
x を0から10まで1刻みで用意
octave:3> x=0:1:10
x =
0 1 2 3 4 5 6 7 8 9 10
y1= -569.6 - 530.9 * x;
octave:6> plot(M(:,1),M(:,2),'r+') hold on コマンドでグラフを重ねて描く
octave:7> hold on
octave:8> plot (x, y1) できた。
一応、ブログアップ用に画像保存 octave:9> print -dpng 'week2q2.png'
2015年12月19日土曜日
Octaveの警告pstoedit binary is not available.
Cousera Machine Learning/week2-2-4
Plotting Data
t=[0:0.01:0.98];
y1=sin(2*pi*4*t);
plot(t,y1);
y2=cos(2*pi*4*t);
重ねてグラフ表示をしたい場合
hold on
plot(t, y1, 'r');
> print -dpng 'TEST_octave.png'
と実行したら、次の警告が出てしまった。
warning: print.m: fig2dev binary is not available.
Some output formats are not available.
warning: print.m: pstoedit binary is not available.
Some output formats are not available.
CentOS7 上でOctaveを動かしていたが、グラフの保存ができないか?
yum install transfig
を実行して、警告は減ったが
warning: print.m: pstoedit binary is not available.
というエラーの方は出ている。
どうにもこの警告が消えない。
が、これは大して問題ではないようだ。
Plotting Data
t=[0:0.01:0.98];
y1=sin(2*pi*4*t);
plot(t,y1);
y2=cos(2*pi*4*t);
重ねてグラフ表示をしたい場合
hold on
plot(t, y1, 'r');
> print -dpng 'TEST_octave.png'
と実行したら、次の警告が出てしまった。
warning: print.m: fig2dev binary is not available.
Some output formats are not available.
warning: print.m: pstoedit binary is not available.
Some output formats are not available.
CentOS7 上でOctaveを動かしていたが、グラフの保存ができないか?
yum install transfig
を実行して、警告は減ったが
warning: print.m: pstoedit binary is not available.
というエラーの方は出ている。
どうにもこの警告が消えない。
が、これは大して問題ではないようだ。
2015年12月16日水曜日
最急降下法
Coursera Machine Learning
https://www.coursera.org/learn/machine-learning/
week1
Parameter Learning/Gradient Descent
最急降下法というのがようやく腑に落ちて納得できた。
最急降下法(Wikipedia)
Google TensorFlowの"GET STARTED"に出てくる
https://www.coursera.org/learn/machine-learning/
week1
Parameter Learning/Gradient Descent
最急降下法というのがようやく腑に落ちて納得できた。
最急降下法(Wikipedia)
Google TensorFlowの"GET STARTED"に出てくる
optimizer = tf.train.GradientDescentOptimizer(0.5)という行のコードがなんとなくわかった。Google TensorFlowは、まだまだ使い方がよくわからないけども。 機械学習の勉強
あれこれ、あれこれ機械学習を勉強しようとして、
どうも、CourseraのMachine Learningという無料講義がよさそう。
やってみることにした。
しかし、英語。。。
あと、Octave というソフトを入れてみたけど、今のところ使い方不明。
"(カクテルパーティー問題)"
2人が同時に話している2つのマイクの録音から、1人の音声を抽出する
この問題をOctaveを使って
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x`);
と言う一行のコードで解決できるとのこと。
だが、どうやって解決できるのだろう。
機械学習の講義の主題ではないようだか、かなり気になった。
これが簡単にできるならやってみたい。
。。。今日はここまで。
どうも、CourseraのMachine Learningという無料講義がよさそう。
やってみることにした。
しかし、英語。。。
あと、Octave というソフトを入れてみたけど、今のところ使い方不明。
"(カクテルパーティー問題)"
2人が同時に話している2つのマイクの録音から、1人の音声を抽出する
この問題をOctaveを使って
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x`);
と言う一行のコードで解決できるとのこと。
だが、どうやって解決できるのだろう。
機械学習の講義の主題ではないようだか、かなり気になった。
これが簡単にできるならやってみたい。
。。。今日はここまで。
ラベル:
Cousera Machine Learning,
機械学習
登録:
投稿 (Atom)

