Exemplo n.º 1
0
        protected void InitCache(List <ILayer> s_forwardRNN, List <ILayer> s_backwardRNN, IOutputLayer outputLayer)
        {
            forwardHiddenLayers  = s_forwardRNN;
            backwardHiddenLayers = s_backwardRNN;

            //Initialize output layer
            OutputLayer = outputLayer;

            forwardCellList  = new List <Neuron[]>();
            backwardCellList = new List <Neuron[]>();

            for (int i = 0; i < numOfLayers; i++)
            {
                var forwardCells  = new Neuron[MaxSeqLength];
                var backwardCells = new Neuron[MaxSeqLength];

                for (int j = 0; j < MaxSeqLength; j++)
                {
                    if (forwardHiddenLayers[i] is DropoutLayer)
                    {
                        forwardCells[j]  = new DropoutNeuron(forwardHiddenLayers[i].LayerSize);
                        backwardCells[j] = new DropoutNeuron(forwardHiddenLayers[i].LayerSize);
                    }
                    else if (forwardHiddenLayers[i] is LSTMLayer)
                    {
                        forwardCells[j]  = new LSTMNeuron(forwardHiddenLayers[i].LayerSize);
                        backwardCells[j] = new LSTMNeuron(forwardHiddenLayers[i].LayerSize);
                    }
                    else
                    {
                        forwardCells[j]  = new Neuron(forwardHiddenLayers[i].LayerSize);
                        backwardCells[j] = new Neuron(forwardHiddenLayers[i].LayerSize);
                    }
                }

                forwardCellList.Add(forwardCells);
                backwardCellList.Add(backwardCells);
            }

            OutputCells = new Neuron[MaxSeqLength];
            for (var i = 0; i < MaxSeqLength; i++)
            {
                OutputCells[i] = new Neuron(OutputLayer.LayerSize);
            }

            InitLayersOutputCache();
        }
Exemplo n.º 2
0
        public void InitCache(List <SimpleLayer> s_forwardRNN, List <SimpleLayer> s_backwardRNN, SimpleLayer outputLayer)
        {
            forwardHiddenLayers  = s_forwardRNN;
            backwardHiddenLayers = s_backwardRNN;

            //Initialize output layer
            OutputLayer = outputLayer;

            forwardCellList  = new List <Neuron[]>();
            backwardCellList = new List <Neuron[]>();
            fErrLayers       = new List <float[][]>();
            bErrLayers       = new List <float[][]>();

            for (int i = 0; i < numOfLayers; i++)
            {
                var forwardCells  = new Neuron[MaxSeqLength];
                var backwardCells = new Neuron[MaxSeqLength];
                var fErrLayer     = new float[MaxSeqLength][];
                var bErrLayer     = new float[MaxSeqLength][];

                for (int j = 0; j < MaxSeqLength; j++)
                {
                    if (forwardHiddenLayers[i] is DropoutLayer)
                    {
                        forwardCells[j]  = new DropoutNeuron();
                        backwardCells[j] = new DropoutNeuron();

                        ((DropoutNeuron)forwardCells[j]).mask  = new bool[forwardHiddenLayers[i].LayerSize];
                        ((DropoutNeuron)backwardCells[j]).mask = new bool[forwardHiddenLayers[i].LayerSize];
                    }
                    else if (forwardHiddenLayers[i] is LSTMLayer)
                    {
                        var lstmForwardCell  = new LSTMNeuron();
                        var lstmBackwardCell = new LSTMNeuron();

                        lstmForwardCell.LSTMCells  = new LSTMCell[forwardHiddenLayers[i].LayerSize];
                        lstmBackwardCell.LSTMCells = new LSTMCell[forwardHiddenLayers[i].LayerSize];

                        for (int k = 0; k < forwardHiddenLayers[i].LayerSize; k++)
                        {
                            lstmForwardCell.LSTMCells[k]  = new LSTMCell();
                            lstmBackwardCell.LSTMCells[k] = new LSTMCell();
                        }

                        forwardCells[j]  = lstmForwardCell;
                        backwardCells[j] = lstmBackwardCell;
                    }
                    else
                    {
                        forwardCells[j]  = new Neuron();
                        backwardCells[j] = new Neuron();
                    }

                    forwardCells[j].Cells           = new float[forwardHiddenLayers[i].LayerSize];
                    forwardCells[j].PrevCellOutputs = new float[forwardHiddenLayers[i].LayerSize];

                    backwardCells[j].Cells           = new float[forwardHiddenLayers[i].LayerSize];
                    backwardCells[j].PrevCellOutputs = new float[forwardHiddenLayers[i].LayerSize];

                    fErrLayer[j] = new float[forwardHiddenLayers[i].LayerSize];
                    bErrLayer[j] = new float[forwardHiddenLayers[i].LayerSize];
                }


                forwardCellList.Add(forwardCells);
                backwardCellList.Add(backwardCells);
                fErrLayers.Add(fErrLayer);
                bErrLayers.Add(bErrLayer);
            }

            InitOutputLayerCache();
        }