Neural network iRPROP&x2B;多层感知器
大家好,这是我的MLP的iRPROP+algo代码。当我尝试训练我的网络时,标准偏差在1500个epoch内减小(非常慢:从~0.5到0.4732),但突然开始增加。 有人能说我做错了什么吗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--) {
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
对于第一个视图,您计算一个列车元素错误,并立即将其告知网络。试着在不改变重量的情况下运行整个列车组,并总结出增量。之后,更新权重一次,设置上一个增量并重新开始。此外,神经元阈值也没有更新