复值神经网络反向传播

时间:2017-11-02 19:32:36

标签: c# neural-network

我正在研究复杂的神经网络,rvnn ok但是当它转换为cvnn错误并没有减少,我无法弄清楚错误在哪里,我的代码就在这里

  public bool Train(List<Complex> input, List<Complex> output)
        {
            if ((input.Count != this.Layers[0].Neurons.Count) || (output.Count != this.Layers[this.Layers.Count - 1].Neurons.Count)) return false;

            Run(input);
            error = 0;

            for(int i = 0; i < this.Layers[this.Layers.Count - 1].Neurons.Count; i++)
            {
                Neuron neuron = this.Layers[this.Layers.Count - 1].Neurons[i];

                neuron.Delta = dSigmoid(neuron.Value) * (output[i] - neuron.Value);
                error += (output[i] - neuron.Value).Magnitude;
                for(int j = this.Layers.Count - 2; j > 2; j--)
                {
                    for(int k = 0; k < this.Layers[j].Neurons.Count; k++)
                    {
                        Neuron n = this.Layers[j].Neurons[k];

                        n.Delta = dSigmoid(n.Value)*                                  
                                  this.Layers[j + 1].Neurons[i].Dendrites[k].Weight *
                                  this.Layers[j + 1].Neurons[i].Delta;
                    }
                }
            }

            for(int i = this.Layers.Count - 1; i > 1; i--)
            {
                for(int j=0; j < this.Layers[i].Neurons.Count; j++)
                {
                    Neuron n = this.Layers[i].Neurons[j];
                    n.Bias = n.Bias + (this.LearningRate * n.Delta);

                    for (int k = 0; k < n.Dendrites.Count; k++)
                        n.Dendrites[k].Weight = n.Dendrites[k].Weight + (this.LearningRate * this.Layers[i - 1].Neurons[k].Value * n.Delta);
                }
            }

            return true;
        }

1 个答案:

答案 0 :(得分:0)

复杂反向传播(BP)与真实BP不同, 检查此post以确保使用正确的公式。