MATLAB神经网络:使用自定义性能函数时的trainbfg问题

时间:2011-07-17 20:45:52

标签: neural-network matlab

我编写了自己的自定义性能函数,即具有一些修改的交叉熵函数,称为增广交叉熵函数。

我的表现函数itselft是两个函数的总和:交叉熵函数F和罚函数P,公式如下:

Performance function Enter image description here

其中 B 和向量 e1 e2 只是一些常量,w是权重矩阵({{1}对于隐藏层神经元,i用于输入层神经元)。

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

Derivative dx

然后我开始使用 trainbfg 功能训练我的神经网络,发现它没有学到任何东西。消息是“行搜索未找到新的最小值”。来自trainbfg描述:

  

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

事实证明,参数wij始终由默认搜索功能 srchbac (行搜索)计算为0。我认为它与我的性能函数被错误地实现有关,因为当我将 mse 设置为性能函数时,a被正确计算。

a功能定位新的最小值时出现问题的原因是什么?只知道我应该在哪里寻找第二天我什么都没找到。

编辑:

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

srchbac

以及我设置为0的其余值(以便res = 2 .* E1 .* b .* W ./( 1 + b .* W.^2).^2 + 2 .* E2 .* W ; 与x向量具有相同的长度)。

0 个答案:

没有答案