【问题标题】:Weights in feed-forward backpropogation ANN not changing前馈反向传播 RNN 中的权重不变
【发布时间】:2017-05-13 05:09:58
【问题描述】:

我正在设计一个具有 22 个输入和 1 个输出(1 或 0)的前馈反向传播 ANN。 NN 有 3 层,使用 10 个隐藏神经元。当我运行 NN 时,它只会稍微改变权重,输出的总误差约为 40%。最初,我认为它过拟合/欠拟合,但在我改变了隐藏神经元的数量之后,什么都没有改变。

N 是输入的数量 (22)

M 是隐藏神经元的数量 (10)

这是我用来反向传播的代码

oin 是在放入 sigmoid 函数之前计算的输出

oout是经过sigmoid函数后的输出

double odelta = sigmoidDerivative(oin) * (TARGET_VALUE1[i] - oout);
    double dobias = 0.0;
    double doweight[] = new double[m];

    for(int j = 0; j < m; j++)
    {
        doweight[j] = (ALPHA * odelta * hout[j]) + (MU * (oweight[j] - oweight2[j]));
        oweight2[j] = oweight[j];
        oweight[j] += doweight[j];
    } // j

    dobias = (ALPHA * odelta) + (MU * (obias - obias2));
    obias2 = obias;
    obias += dobias;

    updateHidden(N, m, odelta);

这是我用来改变隐藏神经元的代码。

 for(int j = 0; j < m; j++)
        {
            hdelta = (d * oweight[j]) * sigmoidDerivative(hin[j]);

            for(int i = 0; i < n; i++)
            {
                dhweight[i][j] = (ALPHA * hdelta * inputNeuron[i]) + (MU * (hweight[i][j] - hweight2[i][j]));
                hweight2[i][j] = hweight[i][j];
                hweight[i][j] += dhweight[i][j];


            } 

            dhbias[j] = (ALPHA * hdelta) + (MU * (hbias[j] - hbias2[j]));
            hbias2[j] = hbias[j];
            hbias[j] += dhbias[j];
        } `

【问题讨论】:

  • 如何初始化权重?您能否向我们提供更多代码 - 关于如何更新和初始化您的网络?
  • 我通过随机化-1和1之间的权重来初始化它

标签: neural-network artificial-intelligence backpropagation feed-forward


【解决方案1】:

你正在学习你的网络在一个节点上输出两个类。连接到这个网络的权重正在适应预测一个类,然后是另一个类。所以大多数时候你的权重会适应你数据中的主导类。为避免出现此问题,请添加另一个节点以在输出上有两个节点,每个节点都引用一个类。

【讨论】:

  • 我该怎么做呢?我只是在学习 ANN,我不太确定我是否理解你的答案。两个类是什么意思?
猜你喜欢
  • 2017-05-24
  • 2017-08-05
  • 2015-08-25
  • 2023-03-29
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
相关资源
最近更新 更多