用Matlab训练神经网络:train()函数输出与MSE误差不一致

3

我刚开始使用Matlab的工具箱进行简单神经网络训练。 我的Matlab版本是2019a。 然而,有一件事情让我困惑。考虑以下代码:

 Nsamples=1000;
 NoiseMag=0.2;
 rx=linspace(-1,1,Nsamples);
 ry = rx + NoiseMag*randn(size(rx));

 net=feedforwardnet(50);
 [net,tr]=train(net,rx,ry);

这段代码在带有噪声的样本(rx,ry)上训练了一个具有单隐藏层的前馈神经网络。我感到困惑的是,由tr.perf输出的网络训练误差与mse(net,rx(tr.trainInd),ry(tr.trainInd))不一致:

  tr.perf   %output: [9.7205    0.0419    0.0370    0.0364    0.0361    0.0358    0.0356    0.0355    0.0355    0.0354]
 mse(net,rx(tr.trainInd),ry(tr.trainInd)) . %Output 0.0401

解释: tr.perf 每次迭代(或周期)输出训练误差。下一个命令mse(net,rx(tr.trainInd),ry(tr.trainInd)) 输出当前 (最优) 神经网络参数的训练误差。

由于tr.best_epoch3,因此tr.perf 的第三个元素应该与mse(net,rx(tr.trainInd),ry(tr.trainInd)) 完全相等,但它并不相等。

有任何想法原因吗?当比较验证和测试误差时,我也观察到同样的不一致性。如果编译这些示例,则输出将稍有不同,因为样本和NN的初始权重具有随机性。

谢谢

1个回答

0

我没有仔细阅读 mse 函数的文档。

  mse(net,targets,outputs,errorWeights,...parameters...) calculates a
network performance given targets, outputs, error weights and parameters
as the mean of squared errors.

因此,第二个参数必须是目标,第三个参数是网络输出。修复代码后,输出变得一致。我正在寻找的函数 - 简单计算两个向量的均方误差的函数名为immse
 mse(net,ry(tr.trainInd),net(rx(tr.trainInd))) % output 0.0334
 tr.perf(tr.best_epoch+1) % output 0.0334
 immse(net(rx(tr.trainInd)),ry(tr.trainInd)) % output 0.0334

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接