Matlab中的自定义性能函数

时间:2014-08-06 10:13:49

标签: matlab neural-network

我想在我的神经网络中添加一个自定义的perf函数,使用小波函数作为perf(我首先使用小波分解信号,然后重新组合信号并从中计算信号)

我尝试过这里解释的学术方式: http://www.mathworks.fr/support/solutions/en/data/1-1BYOH/index.html?product=NN&solution=1-1BYOH

所以我创建一个名为MyPerformanceFunction.m的.m文件并添加:

function perf = MyPerformanceFunction(e, x, pp)
perf = 1;

并将perf函数更改为:

net.performFcn = 'MyPerformanceFunction';

仅用于测试

但是我收到了一个错误:

Error using struct
Conversion to struct from double is not possible.

Error in network/subsasgn>getDefaultParam (line 2023)
    param = struct(feval(fcn,'defaultParam'));

Error in network/subsasgn>setPerformFcn (line 1886)
net.performParam = getDefaultParam(performFcn);

Error in network/subsasgn>network_subsasgn (line 445)
    if isempty(err), [net,err]=setPerformFcn(net,performFcn); end

Error in network/subsasgn (line 13)
net = network_subsasgn(net,subscripts,v,netname);

Error in nntest3 (line 26)
net.performFcn = 'MyPerformanceFunction';

任何人都知道它可能来自哪里?

我使用R2013a

感谢

杰夫

1 个答案:

答案 0 :(得分:2)

简答:它不会起作用,因为只有一个功能来实现自定义性能功能还不够。

答案很长:

这一行:

param = struct(feval(fcn,'defaultParam'));

相当于:

param = MyPerformanceFunction('defaultParam')

内置性能功能,例如msessemae等,设置为除了将perf作为数字返回之外,还可以返回其他信息。例如,只调用mae而不返回任何输入:

ans = 

         WARNING1: 'THIS IS AN IMPLEMENTATION STRUCTURE'
         WARNING2: 'THIS INFORMATION MAY CHANGE WITHOUT NOTICE'
             name: 'Mean Absolute Error'
        mfunction: 'mae'
             type: 'performance_fcn'
         typeName: 'Performance Function'
        normalize: 1
            apply: @mae.apply
         backprop: @mae.backprop
      forwardprop: @mae.forwardprop
        dperf_dwb: @mae.dperf_dwb
    parameterInfo: [1x2 nnetParamInfo]
     defaultParam: [1x1 struct]

性能函数不仅仅是返回值perf的单个函数 - 还有一个关联的子函数子目录,这些函数都需要存在。如果您想这样做,最好的方法是使用现有的性能函数作为模板。

键入help nncustom以查看有关为神经网络创建各种自定义函数的建议。例如我的版本给出:

Performance functions
    Functions created before R2012b must be updated.
    Use mse and its package of subfunctions +mse as templates.