【问题标题】:NN training with Matlab: train() function output is not consistent with MSE error使用 Matlab 进行 NN 训练:train() 函数输出与 MSE 错误不一致
【发布时间】:2019-12-14 07:57:42
【问题描述】:

我刚刚开始使用 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 输出每次迭代(或 epoch)的训练误差。下一条命令mse(net,rx(tr.trainInd),ry(tr.trainInd)) 输出当前(最优)神经网络参数的训练误差。

由于tr.best_epoch3tr.perf 的第三个元素应该完全等于mse(net,rx(tr.trainInd),ry(tr.trainInd)),但事实并非如此。

知道为什么吗? 在比较验证和测试错误时,我也观察到了同样的不一致。 如果您编译这些示例,由于样本的随机性和 NN 的初始权重,您的输出将略有不同。

谢谢

【问题讨论】:

    标签: matlab neural-network


    【解决方案1】:

    我没有仔细阅读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
    

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 2021-05-09
      • 2021-05-07
      • 2019-09-23
      • 2015-01-18
      • 1970-01-01
      • 2014-02-17
      • 2017-10-21
      相关资源
      最近更新 更多