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



在测试自己的编码网络之前,我试图模拟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,并使用反向传播算法,但对于这种模式,代码似乎永远不会收敛。

通过调用

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

附言:NEWFIT在R2010b NNET 7.0中已作废。上次使用于R2010a NNET 6.0.4。

最新更新