神经网络:训练Y = X1 + X2表现不佳:如何训练小的不稳定模式进行回归

时间:2012-01-29 20:32:26

标签: neural-network matlab

在测试我自己的编码网络之前,我试图模拟MATLAB的NN功能。我正在训练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是不够的?或者它只是过度专业化?我认为这是一个回归问题。现在,我不知道我应该从自己的编码网络中得到什么。我想知道这个NN在什么标准下会产生如此愚蠢的结果?有没有办法知道它映射到哪个功能(我不知道!)?我自己的网络甚至不会收敛,因为它将总和平方误差检查为循环中断条件。那么如何应对这种训练模式呢?

然而,我还有另一种令人敬畏的训练模式,我无法训练。

有人可以训练以下数据集吗?它会工作/收敛吗?

0 0 -------> 0

0 1 -------> 1000

1000 0 ----> 1

1 1 -------> 0

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

1 个答案:

答案 0 :(得分:1)

致电

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

PS:NEWFIT在R2010b NNET 7.0中已经过时。最后用于R2010a NNET 6.0.4。