単層ニューラル ネットワークの実装には、2 つのデータ ファイルがあります。
In:
0.832 64.643
0.818 78.843
Out:
0 0 1
0 0 1
上記は2つのデータファイルのフォーマットです。
対象の出力は、対応する入力が属する特定のクラスに対して「1」、残りの 2 つの出力に対して「0」です。
問題は次のとおりです。
単層ニューラル ネットワークは、Y = A*X + b で A (3 x 2 行列) と b (3 x 1 ベクトル) を見つけます。ここで、Y は [C1, C2, C3]' で、X は [x1, x2]' です。 .
上記の問題をニューラル ネットワークで解決するには、方程式を次のように書き直すことができます。 1]'
これで、3 つの入力ノード (それぞれ x1、x2、および 1 に 1 つ) と 3 つの出力 (C1、C2、C3) を持つニューラル ネットワークを使用できます。
結果として得られる 9 つの重み (3 つの入力と 3 つの出力の間に 9 つの接続があるため) は、A' 行列の要素に相当します。
基本的に、私はこのようなことをしようとしていますが、うまくいきません:
function neuralNetwork
load X_Q2.data
load T_Q2.data
x = X_Q2(:,1);
y = X_Q2(:,2);
learningrate = 0.2;
max_iteration = 50;
% initialize parameters
count = length(x);
weights = rand(1,3); % creates a 1-by-3 array with random weights
globalerror = 0;
iter = 0;
while globalerror ~= 0 && iter <= max_iteration
iter = iter + 1;
globalerror = 0;
for p = 1:count
output = calculateOutput(weights,x(p),y(p));
localerror = T_Q2(p) - output
weights(1)= weights(1) + learningrate *localerror*x(p);
weights(2)= weights(1) + learningrate *localerror*y(p);
weights(3)= weights(1) + learningrate *localerror;
globalerror = globalerror + (localerror*localerror);
end
end
この関数を別のファイルに記述し、以前のコードで呼び出しています。
function result = calculateOutput (weights, x, y)
s = x * weights(1) + y * weights(2) + weights(3);
if s >= 0
result = 1;
else
result = -1;
end