Beispiel #1
0
        public void Setup(NeuralNetwork nn, NeuralNetworkContext context, NeuralNetworkFullContext fullCtx, NeuralNetworkDerivativeMemory derivMem)
        {
            //initialize memory buffers
            state   = new float[nn.hiddenLayers.Length][];
            weights = new float[nn.hiddenLayers.Length + 1][];
            biases  = new float[nn.hiddenLayers.Length + 1][];

            buf       = new float[nn.hiddenLayers.Length + 1][];
            recurrBuf = new float[nn.hiddenLayers.Length][];

            biasMems         = derivMem.biasMems;
            weightMems       = derivMem.weightMems;
            recurrWeightMems = derivMem.recurrWeightMems;
            recurrWeights    = new float[nn.hiddenLayers.Length][];
            derivativeMemory = derivMem;

            for (int i = 0; i < nn.hiddenLayers.Length; i++)
            {
                state[i]   = new float[nn.hiddenLayers[i].numberOfNeurons];
                weights[i] = nn.hiddenConnections[i].weights;
                biases[i]  = nn.hiddenLayers[i].biases;

                if (i == 0)
                {
                    buf[i] = context.inputData;
                }
                else
                {
                    buf[i] = fullCtx.hiddenBuffer[i - 1];
                }

                if (nn.hiddenLayers[i].recurring)
                {
                    recurrWeights[i] = nn.hiddenRecurringConnections[i].weights;
                    recurrBuf[i]     = fullCtx.hiddenRecurringBuffer[i];
                }
            }

            int lid = nn.hiddenLayers.Length;

            weights[lid] = nn.outputConnection.weights;
            biases[lid]  = nn.outputLayer.biases;
            if (lid > 0)
            {
                buf[lid] = fullCtx.hiddenBuffer[lid - 1];
            }
            else
            {
                buf[lid] = context.inputData;
            }
        }