【问题标题】:How to customize error function of MATLAB Neural Network如何自定义 MATLAB 神经网络的误差函数
【发布时间】:2011-10-31 16:40:03
【问题描述】:

我想将此函数实现为训练神经网络的误差函数:

function err = MyErrorFunction(T,O)
  d = T - O;
  err = -d*( exp(-d) - 1 );
end

其中T 是目标值,O 是输入的神经网络输出。

训练算法无关紧要(显然trainlm 的错误函数不可自定义,所以我可以使用trainscg)。

我发现this article 建议使用template_performance.m 文件来定义新的性能函数。我说我只是复制此文件并根据需要对其进行自定义。

但据我了解,`template_performance.m` 是 **performance** 函数的模板,而不是 **error** 函数:`template_performance.m` 获取错误值并输出性能值,例如它可以总结误差的平方并输出它们(SSE)。

显然,template_performance.m 从 MATLAB 2010 开始已被弃用。

那么,在训练神经网络时,如何改变计算/评估错误/性能的方式?

【问题讨论】:

标签: matlab customization neural-network


【解决方案1】:

我也遇到过类似的问题……关于自定义性能函数的整个过程是一场彻底的灾难。很多东西都在贬值,关于我们应该做什么的文档为零。

我最终不得不破解我不打算使用的性能功能的核心文件 (SSE)。在 matlab 目录MATLAB\R2012b\toolbox\nnet\nnet\nnperformance 下可以找到它们。我根据tt-1 的变化,用一些方向权重修改了 apply.m(在 SSE+ 文件夹中)函数。但后来我遇到了训练算法以与perform() 不同的方式和格式向apply() 发送参数的问题。我最终没有使用perform() 并为此编写自己的代码。耶稣……一团糟。

这是一个非常丑陋的 hack,我很想听听任何找到正确方法的人的意见。

【讨论】:

  • 这里也一样。自定义性能函数很难实现。由于没有文档,并且没有记录 vanilla 实现,这是逆向工程问题。如果有人有洞察力,我渴望听到它。
【解决方案2】:

据我了解,性能函数用于训练和测试/评估(除非某个训练算法被硬编码为特定函数)

【讨论】:

  • 正确。我不是在寻找一种在训练/测试中实现不同性能功能的方法。我正在寻找一种自定义错误函数的方法。请仔细阅读问题。有关该问题的更多详细信息也可在此处获得:mathworks.com/matlabcentral/newsreader/view_thread/…
  • 我可能完全错了,但训练算法不是对性能函数的输出(不是直接的误差/差异值)起作用并试图将其优化为目标吗?如果是这样,实现您的自定义性能功能就足够了。它收到的第一个参数E“错误”是目标和输出之间的差异,它将直接用于您的方程perf = -E*(exp(-E)-1)...您应该知道,从 MATLAB R2010b 开始,所有这些函数都已被弃用。
  • 你是对的。性能函数实际上是我正在寻找的。但显然这个解决方案(使用template_performance)对于 MATLAB 2010 及更高版本已过时。那么,还有其他想法吗?
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2014-04-20
  • 1970-01-01
  • 2023-03-08
  • 2010-12-02
  • 2015-12-03
相关资源
最近更新 更多