Neural network iRPROP&x2B;多层感知器

Neural network iRPROP&x2B;多层感知器,neural-network,propagation,Neural Network,Propagation,大家好,这是我的MLP的iRPROP+algo代码。当我尝试训练我的网络时,标准偏差在1500个epoch内减小(非常慢:从~0.5到0.4732),但突然开始增加。 有人能说我做错了什么吗 public void RPROP() { double a = 1.2, b = 0.5, nMax = 50, nMin = 0.000001; for (int l = Network.Length - 1; l > 0; l--) {

大家好,这是我的MLP的iRPROP+algo代码。当我尝试训练我的网络时,标准偏差在1500个epoch内减小(非常慢:从~0.5到0.4732),但突然开始增加。 有人能说我做错了什么吗

 public void RPROP()
    {
        double a = 1.2, b = 0.5, nMax = 50, nMin = 0.000001;

        for (int l = Network.Length - 1; l > 0; l--)
        {
            for (int i = 0; i < Network[l].getSize(); i++)
            {
                Neuron n = Network[l].Neurons[i];
                double sum = 0;
                if (l == Network.Length - 1) n.Delta = (n.Output - DesiredOutput[i]) * ActFunc.calcDeprivateFunction(n.Output);
                else
                {
                    for (int k = 0; k < Network[l + 1].getSize(); k++)
                    {
                        sum += Network[l + 1].Neurons[k].getWeight(i) * Network[l + 1].Neurons[k].Delta;
                    }
                    n.Delta = sum * ActFunc.calcDeprivateFunction(n.Output);
                }

            }
        }
        for (int l = 1; l < Network.Length; l++)
        {
            for (int i = 0; i < Network[l].getSize(); i++)
            {
                Neuron n = Network[l].Neurons[i];
                if ((n.PrevDelta * n.Delta) > 0)
                {
                    n.N = Math.Min(a * n.PrevN, nMax);
                    n.Bias -= n.N * Math.Sign(n.Delta);
                    for (int j = 0; j < Network[l - 1].getSize(); j++)
                    {
                        n.setWeight(j, n.getWeight(j) - n.N * Math.Sign(n.Delta));
                    }
                    n.PrevDelta = n.Delta;
                }
                else if ((n.PrevDelta * n.Delta) < 0)
                {
                    n.N = Math.Max(b * n.PrevN, nMin);
                    if (this.CurrentError > this.LastError)
                    {
                        n.Bias += n.PrevN * Math.Sign(n.PrevDelta);
                        for (int j = 0; j < Network[l - 1].getSize(); j++)
                        {
                            n.setWeight(j, n.getWeight(j) + n.PrevN * Math.Sign(n.PrevDelta));
                        }
                    }
                    n.Delta = 0;

                }
                else if ((n.PrevDelta * n.Delta) == 0)
                {
                    n.Bias -= n.N * Math.Sign(n.Delta);
                    for (int j = 0; j < Network[l - 1].getSize(); j++)
                    {
                        n.setWeight(j, n.getWeight(j) - n.N * Math.Sign(n.Delta));
                    }
                    n.PrevDelta = n.Delta;
                }
                n.PrevN = n.N;
            }
        }
    }
public void RPROP()
{
双a=1.2,b=0.5,nMax=50,nMin=0.000001;
对于(int l=网络长度-1;l>0;l--)
{
对于(int i=0;i0)
{
n、 n=数学最小值(a*n.PrevN,nMax);
n、 偏差-=n.n*数学符号(n.Delta);
对于(intj=0;jthis.LastError)
{
n、 偏差+=n.PrevN*数学符号(n.PrevDelta);
对于(intj=0;j
对于第一个视图,您计算一个列车元素错误,并立即将其告知网络。试着在不改变重量的情况下运行整个列车组,并总结出增量。之后,更新权重一次,设置上一个增量并重新开始。
此外,神经元阈值也没有更新