提问人:user414981 提问时间:8/10/2010 最后编辑:Communityuser414981 更新时间:8/11/2010 访问量:995
单层神经网络中的 MATLAB 语法错误 [已关闭]
matlab syntax errors in single layer neural network [closed]
问:
我必须实现一个单层神经网络或感知器。为此,我有 2 个文件数据集 ,一个用于输入,一个用于输出。我必须在不使用神经工具箱的情况下在 matlab 中执行此操作。下面给出了 2 个文件的格式。
In:
0.832 64.643
0.818 78.843
1.776 45.049
0.597 88.302
1.412 63.458
Out:
0 0 1
0 0 1
0 1 0
0 0 1
0 0 1
目标输出为“1”表示相应输入所属的特定类,目标输出为“0”表示其余 2 个输出。
我试着这样做,但它对我不起作用。
load in.data
load out.data
x = in(:1);
y = in(:2);
learning rate = 0.2;
max_iteration = 50;
function result = calculateOutput(weights,x, y)
s = x*(weights(1) +weight(2) +weight(3));
if s>=0
result = 1
else:
result = -1
end
end
Count = length(x);
weights[0] = rand();
weights[1] = rand();
weights[2] = rand();
iter = 0;
do {
iter++;
globalerror = 0;
for(p=0; p<count;p++){
output = calculateoutput(weights,x[p],y[p]);
localerror = output[p] - output
weights[0]+= learningrate *localerror*x[p];
weights[1]+= learningrate *localerror*y[p];
weights[2]+= learningrate *localerror;
globalerror +=(localerror*localerror);
}
}while(globalerror != 0 && iter <= max_iteration);
这个算法的错误在哪里??
我指的是以下链接中给出的示例:-
答:
1赞
Paul Hoffer
8/10/2010
#1
在第 #10 行,您有 ;但代码的其余部分带有 .weights(1) +weight(2) +weight(3)
weights
s
编辑:此外,MATLAB没有运算符;您的循环将导致错误。在 MATLAB 中,构造一个如下循环:++
for
for
for p=0:count
blah blah blah
end
此外,MATLAB也不使用运算符,正如Jonas在他的代码中指出的那样。您需要执行以下操作:+=
weights(0) = weights(0) + learningrate * localerror * x(p)
9赞
gnovice
8/10/2010
#2
以下是我看到的错误列表:
深呼吸
- 索引语法不正确。也许您的意思是“第 1 列的所有行”。
(:1)
(:,1)
- 没有做这样的事情......MATLAB 中的 while 循环。只有 FOR 和 WHILE 循环。此外,你的 for 循环定义错误。MATLAB对此有不同的语法。
- MATLAB 中没有 or 运算符。
++
+=
- MATLAB 中的“不相等”运算符是 ,而不是 。
~=
!=
- 向量和矩阵的索引需要用括号来完成,而不是方括号。
()
[]
- 所有这些都是在函数还是脚本中?您不能在脚本中定义函数,即 。您必须将其放在自己的 m 文件中。如果所有代码实际上都在一个较大的函数中,那么它就是一个嵌套函数,应该可以正常工作(假设你已经用一个 结束了较大的封闭函数)。
calculateOutput
calculateOutput.m
calculateOutput
end
- 变量名称有许多明显的拼写错误:
weight
与。 (根据 Phoffer 的回答weights
)Count
与。 (MATLAB 区分大小写)count
calculateOutput
与。 (再次区分大小写)calculateoutput
learning rate
与。 (变量中不能有空格)learningrate
大量呼气 ;)
简而言之,它需要相当多的工作。
评论
1赞
Jonas
8/10/2010
如果 calculateOutput 是嵌套函数,则需要用end
0赞
gnovice
8/10/2010
@Jonas:谢谢,我说得更明确了。
1赞
Jonas
8/10/2010
#3
主要错误是这不是使用 Matlab 语法编写的。这是尝试做我认为你想做的事情。
不幸的是,您的算法存在一个根本问题(请参阅代码中的注释)。另外,我认为你应该看看非常好的Matlab文档。阅读手册将快速告诉您如何格式化它。
function neuralNetwork
%# load data
load in.data
load out.data
x = in(:,1);
y = in(:,2);
%# set constants
learningrate = 0.2;
max_iteration = 50;
% initialize parameters
count = length(x);
weights = rand(1,3); % creates a 1-by-3 array with random weights
iter = 0;
while globalerror ~= 0 && iter <= max_iteration
iter = iter + 1;
globalerror = 0;
for p = 1:count
output = calculateOutput(weights,x(p),y(p));
%# the following line(s) cannot possibly work
%# output is not a vector, since the previous line
%# assigns it to a scalar
%# Also, arrays are accessed with parentheses
%# and indexing starts at 1
%# and there is no += operator in Matlab
localerror = output[p] - output
weights[0]+= learningrate *localerror*x[p];
weights[1]+= learningrate *localerror*y[p];
weights[2]+= learningrate *localerror;
globalerror +=(localerror*localerror);
end %# for-loop
end %# while-loop
%# subfunctions in Matlab are put at the end of the file
function result = calculateOutput(weights,x, y)
s = x*(weights(1) +weight(2) +weight(3));
if s>=0
result = 1
else:
result = -1
end
end
评论
0赞
Paul Hoffer
8/10/2010
重写它的好主意,但 MATLAB 也没有使用。你必须做+=
weights[0] = weights[0] + learningrate * localerror * x[p]
0赞
Paul Hoffer
8/10/2010
对不起,我完全阅读了您的评论块的最后一部分。我将评论移到我的答案中并归功于您。
评论
Count ≢ count