顔の写真で性別を分類する方法を学ぶために、パーセプトロンをコーディングしています。私は MATLAB に非常に慣れていないので、多くの助けが必要です。いくつかの質問を聞きたいんです:
関数のコードを作成しようとしています:
function [y] = testset(x,w) %y = sign(sigma(x*w-threshold))
ここで、y は予測結果、x は非常に大きな行列として入れられたトレーニング/テスト セット、w は方程式の重みです。の後の部分
%
は私が書こうとしているものですが、これを MATLAB コードで記述する方法がわかりません。そこに何かアイデアはありますか?私は2番目の関数をコーディングしようとしています:
function [err] = testerror(x,w,y) %err = sigma(max(0,-w*x*y))
w、x、および y は上記と同じ値を持ち、err はパーセプトロンのステップを通じて最小化しようとしているエラーの関数です。
元の方程式で勾配降下法を使用して、パーセプトロンにステップを作成してエラーの割合を下げようとしています。if then ステートメントを使用してエラー関数を最小限に抑えるために、勾配降下を使用して w をインクリメントする方法を知っている人はいますか?
これらの質問に答えるのに役立つ場合は、今までのコードを掲載できます。
ありがとうございました!
編集 - - - - - - - - - - - - -
OK、私はまだこれのコードに取り組んでおり、より完全なものができたら公開したいと思います. 今の私の最大の質問は次のとおりです。
私は次の機能を持っています:
function [y] = testset(x,w)
y = sign(sum(x*w-threshold))
しきい値を入力する必要があることはわかっていますが、しきい値として何を入力する必要があるかわかりません。そこに何かアイデアはありますか?
編集----------------------------
これは私がこれまでに持っているものです。まだ変更を加える必要がありますが、特に構造に関する意見や、必要な変更を行うためのアドバイスをいただければ幸いです。
function [y] = Perceptron_Aviva(X,w)
y = sign(sum(X*w-1));
end
function [err] = testerror(X,w,y)
err = sum(max(0,-w*X*y));
end
%function [w] = perceptron(X,Y,w_init)
%w = w_init;
%end
%------------------------------
% input samples
X = X_train;
% output class [-1,+1];
Y = y_train;
% init weigth vector
w_init = zeros(size(X,1));
w = w_init;
%---------------------------------------------
loopcounter = 0
while abs(err) > 0.1 && loopcounter < 100
for j=1:size(X,1)
approx_y(j) = Perceptron_Aviva(X(j),w(j))
err = testerror(X(j),w(j),approx_y(j))
if err > 0 %wrong (structure is correct, test is wrong)
w(j) = w(j) - 0.1 %wrong
elseif err < 0 %wrong
w(j) = w(j) + 0.1 %wrong
end
% -----------
% if sign(w'*X(:,j)) ~= Y(j) %wrong decision?
% w = w + X(:,j) * Y(j); %then add (or subtract) this point to w
end