Neural network 神经网络:序列Y=X1+;X2性能差:如何为回归训练小的不稳定模式

Neural network 神经网络:序列Y=X1+;X2性能差:如何为回归训练小的不稳定模式,neural-network,matlab,Neural Network,Matlab,在测试我自己的编码网络之前,我试图模拟MATLAB的神经网络函数。我在训练y=x1+x2 但看看它的表现 >> net = newfit([1 2 3 4 5 0 1 2 5;1 2 3 4 5 1 1 1 1],[2 4 6 8 10 0 2 3 6],15); >> net = train(net,[1 2 3 4 5 0 1 2 5;1 2 3 4 5 1 1 1 1],[2 4 6 8 10 0 2 3 6]); >> sim(net,[1;4])

在测试我自己的编码网络之前,我试图模拟MATLAB的神经网络函数。我在训练y=x1+x2

但看看它的表现

>> net = newfit([1 2 3 4 5 0 1 2 5;1 2 3 4 5 1 1 1 1],[2 4 6 8 10 0 2 3 6],15);

>> net = train(net,[1 2 3 4 5 0 1 2 5;1 2 3 4 5 1 1 1 1],[2 4 6 8 10 0 2 3 6]);

>> sim(net,[1;4])

ans =

   12.1028

>> sim(net,[4;4])

ans =

    8.0000

>> sim(net,[4;1])

ans =

    3.0397

>> sim(net,[2;2])

ans =

    5.1659

>> sim(net,[3;3])

ans =

   10.3024
有人能解释一下这些训练数据有什么问题吗?估计y=x1+x2还不够吗?还是过于专业化?我认为这是一个回归问题。现在,我不知道我应该从自己的编码网络中得到什么。我想知道这个神经网络是基于什么标准收敛的,它在哪里产生了如此愚蠢的结果?有没有办法知道它映射到什么函数(我不知道怎么办!)?我自己的网络甚至不会收敛,因为它检查平方和误差作为循环中断条件。那么如何应对这种培训模式呢

然而,我有另一个可怕的训练模式,我无法训练

有人能训练以下数据集吗?它会起作用吗

0------->0

01------->1000

1000 0--->1

1------->0

我在输出层中使用了f(x)=x,并使用了反向传播算法,但对于这种模式,代码似乎永远不会收敛。

通过调用

net = newfit([1 2 3 4 5 0 1 2 5;1 2 3 4 5 1 1 1 1],[2 4 6 8 10 0 2 3 6],15);
您创建了一个具有大小为15的隐藏层的ANN,这对于您的问题来说可能太多了。此外,你的训练集太小了

这是一个工作代码(在旧计算机上需要一段时间),我让您分析它并与您的代码进行比较,如果您需要进一步解释,请询问:

% Prepare input and target vectors
a = perms(1:9);
x = a(:, 1);
y = a(:, 2);
z = x + y;    
input = [x y];

% Create ANN
net = newfit(input',z',2);

% Learn
net.trainParam.epochs = 1000;
net = train(net, input', z');
结果几乎完美:

>> sim(net,[1;4])

ans =

    5.0002

>> sim(net,[4;4])

ans =

    7.9987

>> sim(net,[4;1])

ans =

    4.9998

>> sim(net,[2;2])

ans =

    4.0024

>> sim(net,[3;3])

ans =

    5.9988
注:在R2010b NNET 7.0中,NEWFIT已被淘汰。最后在R2010a NNET 6.0.4中使用