对于单层神经网络的实现,我有两个数据文件。
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]' .
为了用神经网络解决上述问题,我们可以将方程改写如下: Y = A' * X' 其中 A' = [A b](3×3 矩阵)并且 X' 是 [x1, x2, 1]'
现在您可以使用具有三个输入节点(一个分别用于 x1、x2 和 1)和三个输出(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