我想在我的神经网络中添加一个自定义的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
感谢
杰夫
答案 0 :(得分:2)
简答:它不会起作用,因为只有一个功能来实现自定义性能功能还不够。
答案很长:
这一行:
param = struct(feval(fcn,'defaultParam'));
相当于:
param = MyPerformanceFunction('defaultParam')
内置性能功能,例如mse
,sse
,mae
等,设置为除了将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.