我刚开始使用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_epoch
是 3
,因此tr.perf
的第三个元素应该与mse(net,rx(tr.trainInd),ry(tr.trainInd))
完全相等,但它并不相等。
有任何想法原因吗?当比较验证和测试误差时,我也观察到同样的不一致性。如果编译这些示例,则输出将稍有不同,因为样本和NN的初始权重具有随机性。
谢谢