我是Matlab的新手,我目前正在尝试创建一个具有S型激活功能的单层感知器,以更新权重。
我得到的指示显示为:
”(针对每个培训示例(xe,是)
计算输出:o = s(s)= 1 /(1 + e-s),其中:s =Σi= 0d wi xi
如果感知器无法正确响应,请计算体重校正:
Δwi=Δwi+η(ye-oe)s(s)(1-s(s))xie
使用所有示例中的累积误差更新权重
wi = wi +Δwi//梯度下降规则“
我尝试了一些示例,但是遇到了维数错误,并且在理解此处要计算的元素时遇到了问题。我找到了一个模板并对其进行了调整(如下所示),这似乎可以解决尺寸问题,但是我仍然不明白为什么必须创建一个新变量(npats)以用于输入。
其次,权重和结果似乎没有变化,我不确定为什么。
npats = 4;
x_inputs = [1 0 0 1;1 0 1 1];
Desired = [0 1 1 0];
lr = 0.1;
inputs = [ones(1,npats); x_inputs];
weights = [0 -1 -1];
for i = 1:100
k = 1+rem(i,npats);
output = 1./(1+exp(-1.*(weights * inputs(:, k)))) > 0;
fprintf('%2d. output = ',output);
disp(output);
if output == Desired, break, end
weights = weights + lr * (Desired(k) -output) * output * (1 - output)*inputs(:,k)';
fprintf('%2d. Weights = ',i);
disp(weights);
disp(output);
pause(0.5)
end
对此我们将提供任何帮助或指导