Exemplo n.º 1
0
        public BPNN(int inputLayerNum, int[] hiddenLayerNum, int outputLayersNum, double eta, double lastEta)
        {
            OtherHelper otherHelper = new OtherHelper();

            this.eta     = eta;
            this.lastEta = lastEta;
            i_input      = new double[inputLayerNum + 1];
            i_output     = new double[inputLayerNum + 1];
            h_input      = new double[hiddenLayerNum.Length][];
            h_output     = new double[hiddenLayerNum.Length][];
            h_weights    = new double[hiddenLayerNum.Length][, ];
            h_lastTheta  = new double[hiddenLayerNum.Length][, ];
            for (int i = 0; i < hiddenLayerNum.Length; i++)
            {
                h_input[i]  = new double[hiddenLayerNum[i] + 1];
                h_output[i] = new double[hiddenLayerNum[i] + 1];
                int row = 0;
                int col = 0;
                if (i == 0) //为零时时输入层
                {
                    row = inputLayerNum + 1;
                    col = hiddenLayerNum[i];
                }
                else
                {
                    row = hiddenLayerNum[i - 1] + 1;
                    col = hiddenLayerNum[i];
                }

                h_weights[i]   = new double[row, col];
                h_lastTheta[i] = new double[row, col];
                for (int j = 0; j < row; j++)
                {
                    for (int k = 0; k < col; k++)
                    {
                        h_weights[i][j, k]   = OtherHelper.getRandDouble(-200, 201);
                        h_lastTheta[i][j, k] = 0;
                    }
                }
            }
            o_input     = new double[outputLayersNum];
            o_output    = new double[outputLayersNum];
            o_weights   = new double[hiddenLayerNum[hiddenLayerNum.Length - 1] + 1, outputLayersNum];
            o_lastTheta = new double[hiddenLayerNum[hiddenLayerNum.Length - 1] + 1, outputLayersNum];
            for (int i = 0; i < o_weights.GetLength(0); i++)
            {
                for (int j = 0; j < o_weights.GetLength(1); j++)
                {
                    o_weights[i, j]   = OtherHelper.getRandDouble(-20, 20);
                    o_lastTheta[i, j] = 0;
                }
            }
        }