单层神经网络中的matlab语法错误

时间:2010-08-10 01:51:45

标签: matlab neural-network

我必须实现单层神经网络或感知器。为此,我有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);

这个算法的错误在哪里?

我指的是以下链接中给出的示例: -

Perceptron learning algorithm not converging to 0

3 个答案:

答案 0 :(得分:9)

以下列出了我看错了:

深呼吸

  • 索引语法(:1)不正确。也许你的意思是(:,1)和“第1列的所有行”一样。
  • 在MATLAB中没有do ... while循环。只有FORWHILE循环。此外,您的for循环定义错误。 MATLAB有不同的语法。
  • MATLAB中没有+++=个运算符。
  • MATLAB中的"not equal" operator~=,而不是!=
  • Indexing of vectors and matrices需要使用括号(),而不是方括号[]
  • 所有这些都在functionscript内吗?您无法在脚本中定义函数,即calculateOutput。你必须把它放在它自己的m文件calculateOutput.m中。如果所有代码实际上都在一个更大的函数中,那么calculateOutput就是nested function并且应该可以正常工作(假设你已经使用end结束了更大的封闭函数)。
  • 您对变量名称有很多明显的拼写错误:
    • weightweights(根据phoffer's answer
    • Countcount(MATLAB区分大小写)
    • calculateOutputcalculateoutput(再次,区分大小写)
    • learning ratelearningrate(变量中不能包含空格)

重度呼气;)

简而言之,它需要相当多的工作。

答案 1 :(得分:1)

在第10行,你有weights(1) +weight(2) +weight(3);但其余代码的weightss

编辑:此外,MATLAB没有++运算符;您的for循环将导致错误。在MATLAB中,构造一个for循环,如下所示:

for p=0:count
    blah blah blah
end

此外,正如Jonas在他的代码中指出的那样,MATLAB也不使用+=运算符。你需要这样做:

weights(0) = weights(0) + learningrate * localerror * x(p)

答案 2 :(得分:1)

主要的错误是这不是使用Matlab语法编写的。这是尝试做我认为你想做的事情。

不幸的是,您的算法存在一个基本问题(请参阅代码中的注释)。另外,我认为你应该看看非常好的Matlab文档。阅读manual会告诉您如何格式化这一点。

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