2011-08-21 84 views
1

的误差函数我想实现这个功能作为训练神经网络的误差函数:如何自定义MATLAB神经网络

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已被弃用,从2010年MATLAB

开始训练神经网络时,那么,如何能够改变计算,误差/性能的方法/评估?

+0

你能链接你提到的文章吗? – Amro

+0

这里是文章: http://www.mathworks.com/support/solutions/en/data/1-2VFDSE/index.html?product=NN&solution=1-2VFDSE – Isaac

回答

1

据我所知,性能功能既被用于训练和测试/评估(除非有一定的训练算法是硬编码到一个特定的功能)

+0

正确。我不想在训练/测试中实现不同的表现功能。我正在寻找一种**定制**错误功能的方法。请仔细阅读问题。关于这个问题的更多细节也可以在这里找到:http://www.mathworks.com/matlabcentral/newsreader/view_thread/311783#849948 – Isaac

+2

我可能是完全错误的,但不是训练算法在性能的输出上工作函数(而不是直接的错误/差异值)并试图将其优化为目标?如果是这样,它应该足以实现您的自定义性能函数。第一个接收到“E”错误的参数是目标和输出之间的差异,它将直接用在你的等式中,即perf = -E *(exp(-E)-1)......你应该知道从MATLAB R2010b开始,所有这些函数都被弃用了。 – Amro

+0

你说得对。性能函数*实际上是我正在寻找的。但显然这个解决方案(使用'template_performance')对于MATLAB 2010及以上版本已经过时了。那么,还有其他想法吗? – Isaac

2

我有一个类似的问题...整个关于定制性能功能的事情是一场全面的灾难。很多东西正在被折旧,并且我们应该做的事情没有文档。

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

这是一个非常丑陋的黑客攻击,我很乐意听到任何人发现正确的方法来做到这一点。

+0

同样在这里。自定义性能函数是一个很难实现的功能。由于没有文档和香草实现没有记录,这是逆向工程问题。如果任何人有洞察力,我都渴望听到它。 –