コード例 #1
0
        public void SubtractGrads(List <NeuronValues> grads, double biasGrad)
        {
            if (grads.Count != Lenght)
            {
                throw new IndexOutOfRangeException();
            }
            for (int i = 0; i < NeuronsInfo.Count; i++)
            {
                NeuronInfo  neuronInfo = NeuronsInfo[i];
                int         arrayIndex = neuronInfo.ArrayIndex;
                NeuronTypes type       = neuronInfo.neuronType;
                switch (type)
                {
                case NeuronTypes.feedForward:
                    Neurons[arrayIndex].SubtractGrads(grads[i]);
                    break;

                case NeuronTypes.lSTM:
                    LSTMCells[arrayIndex].SubtractGrads(grads[i]);
                    break;

                case NeuronTypes.recurrent:
                    RecurrentNeurons[arrayIndex].SubtractGrads(grads[i]);
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
            bias -= biasGrad;
        }
コード例 #2
0
        public override Neuron[] CreateNeurons()
        {
            int len = info.neurons.Count;

            Neuron[] neurons = new Neuron[len];
            for (int i = 0; i < len; i++)
            {
                NeuronInfo n = info.neurons[i];
                neurons[i] = new OutputNeuron(n.activation, n.cost);
            }
            return(neurons);
        }
コード例 #3
0
        internal static NeuronInfo ToInternalType(this Graph.Common.NeuronInfo value)
        {
            NeuronInfo result = null;

            if (value != null)
            {
                result = new NeuronInfo()
                {
                    Id  = value.Id,
                    Tag = value.Tag
                }
            }
            ;
            return(result);
        }
コード例 #4
0
        public override Neuron[] CreateNeurons()
        {
            int len = info.hasBias ? info.neurons.Count + 1 : info.neurons.Count;

            Neuron[] neurons = new Neuron[len];
            for (int i = 0; i < info.neurons.Count; i++)
            {
                NeuronInfo n = info.neurons[i];
                neurons[i] = new Neuron(n.activation, n.cost);
            }
            if (info.hasBias)
            {
                neurons[len - 1] = new Bias(info.biasValue);
            }
            return(neurons);
        }
コード例 #5
0
        internal void SetWeigthsAndStates(List <NeuronValues> neuronValues = null)
        {
            if (neuronValues != null)
            {
                for (int i = 0; i < Math.Min(neuronValues.Count, NeuronsInfo.Count); i++)
                {
                    NeuronInfo   info   = NeuronsInfo[i];
                    NeuronValues values = neuronValues[i];
                    switch (info.neuronType)
                    {
                    case NeuronTypes.feedForward:
                        Neurons[info.ArrayIndex].Weigths = neuronValues[i].weigths;
                        break;

                    case NeuronTypes.lSTM:
                        LSTMCells[info.ArrayIndex].Weigths = values.weigths;
                        LSTMCells[info.ArrayIndex].recurrent.storeWeigth  = values.lstmWeigths.storeWeigth;
                        LSTMCells[info.ArrayIndex].recurrent.forgetWeigth = values.lstmWeigths.forgetWeigth;
                        LSTMCells[info.ArrayIndex].recurrent.outputWeigth = values.lstmWeigths.outputWeigth;
                        LSTMCells[info.ArrayIndex].recurrent.hiddenState  = values.lstmWeigths.hiddenState;
                        LSTMCells[info.ArrayIndex].recurrent.cellState    = values.lstmWeigths.cellState;
                        break;

                    case NeuronTypes.recurrent:
                        RecurrentNeurons[info.ArrayIndex].recurrentWeigth = values.recurrentWeigth;
                        if (values.lstmWeigths != null)
                        {
                            RecurrentNeurons[info.ArrayIndex].hiddenState = values.lstmWeigths.hiddenState;
                        }
                        break;

                    default:
                        throw new NotImplementedException();
                    }
                }
            }
            else
            {
                neuronValues = new List <NeuronValues>();
                for (int i = 0; i < NeuronsInfo.Count; i++)
                {
                    neuronValues.Add(new NeuronValues(previousLayerLenght, NeuronsInfo[i].neuronType));
                }
                SetWeigthsAndStates(neuronValues);
            }
        }