Neural network MATLAB神经网络:使用自定义性能函数时的训练问题

Neural network MATLAB神经网络:使用自定义性能函数时的训练问题,neural-network,matlab,Neural Network,Matlab,我已经编写了自己的定制性能函数,这是一个经过一些修改的交叉熵函数,称为增强交叉熵函数 我的性能函数itselft是两个函数的总和:交叉熵函数F和惩罚函数p,公式如下: 其中B和向量e1和e2只是一些常数,w是隐层神经元的权重矩阵i,j是输入层神经元的权重矩阵 我已经实现了dy和dx导数,但对dx导数不是很确定,其中x是getx函数的结果-它包含所有权重和偏差信息。我假设我的性能函数对权重wij的dx导数等于惩罚函数的导数: 然后我开始用trainbfg函数训练我的神经网络,发现它什么也学不到

我已经编写了自己的定制性能函数,这是一个经过一些修改的交叉熵函数,称为增强交叉熵函数

我的性能函数itselft是两个函数的总和:交叉熵函数F和惩罚函数p,公式如下:

其中B和向量e1和e2只是一些常数,w是隐层神经元的权重矩阵i,j是输入层神经元的权重矩阵

我已经实现了dy和dx导数,但对dx导数不是很确定,其中x是getx函数的结果-它包含所有权重和偏差信息。我假设我的性能函数对权重wij的dx导数等于惩罚函数的导数:

然后我开始用trainbfg函数训练我的神经网络,发现它什么也学不到。消息为行搜索未找到新的最小值。来自列车BFG说明:

每个变量根据以下内容进行调整:X=X+a*dX; 其中dX是搜索方向。参数a被选择为 沿搜索方向最小化性能

结果表明,默认搜索函数srchbac line search总是将参数a计算为0。我假设这与我的性能函数被错误地实现有关,因为当我将mse设置为性能函数时,a的计算是正确的

通过srchbac函数查找新最小值时出现问题的原因是什么?只是想知道我该去哪里找,第二天我什么也没找到

编辑:

x向量首先由输入隐藏连接的权重值组成,然后是其余的偏差和权重。我使用以下公式计算权重向量的dx导数:

res = 2 .* E1 .* b .* W ./( 1 + b .* W.^2).^2  + 2 .* E2 .* W ;

其余的值我设置为0,这样res的长度与x向量的长度相同。

你也可以试着问这个问题:你也可以试着问这个问题: