使用Matlab进行NN训练:train()函数输出与MSE错误不一致

时间:2019-08-06 17:50:58

标签: matlab neural-network

我刚刚开始使用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)上的单个隐藏层训练前馈NN。我感到困惑的是,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 :(得分: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