How to change the performance function of neural network to mean absolute relative error

14 次查看(过去 30 天)
Hello,
I know the Matlab NN toolbox has MSE, SSE, MAE and SAE performance functions but would like to implement a custom performance function as:
myperf=mean(abs((t-y)./t));
where t is the target output vector and y is the NN output.
Any thoughts on how can this be implemented?
Thanks in advance.

采纳的回答

Kamuran Turksoy
Kamuran Turksoy 2017-5-4
编辑:Kamuran Turksoy 2017-5-4
I found my own answer for the performance function myperf = mse(1-y./t) as follows:
net.performFcn='mse'; % this is the default setting
net= train(net,x,t,{},{},1./t); % x is the input matrix.
Note: As pointed out by Greg, t is assumed to have nonzero values.
  1 个评论
Jinlong Fu
Jinlong Fu 2019-6-8
编辑:Jinlong Fu 2019-6-8
In my view, it should be as follows:
net.performFcn='mse'; % mean suqare error
net= train(net,x,t,{},{},1./t.^2); % 1./t.^2 is the error weight
or
net.performFcn='mae'; % mean absolut error
net= train(net,x,t,{},{},1./t); % 1./t is the error weight

请先登录,再进行评论。

更多回答(1 个)

Greg Heath
Greg Heath 2017-4-28
You have at least 2 obstacles:
1. When t --> 0
2. abs is not differentiable
If t --> 0 is not a problem try
myperf = mse( 1-y./t);
Hope this helps.
Thank you for formally accepting my answer
Greg
  1 个评论
Kamuran Turksoy
Kamuran Turksoy 2017-4-28
编辑:Kamuran Turksoy 2017-4-28
In my application t cannot be 0.
I could use myperf = mse(1-y./t) or myperf = mse((t-y)./t).
The question is how to use myperf during the model training?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Sequence and Numeric Feature Data Workflows 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by