Пример #1
0
 public void UpdateAllSynapsesByAverage()
 {
     for (int i = 0; i < 7; i++)
     {
         foreach (var synapse in NetworkLayers.Last().NetworkNeurons[i].Inputs)
         {
             //synapse.Weight += newWeights[i];
         }
     }
 }
Пример #2
0
        public void AddLayer(int NeuronCount)
        {
            NetworkLayer newNetworkLayer = new NetworkLayer();

            newNetworkLayer.AddLayer(NeuronCount);
            if (NetworkLayers.Count > 0)
            {
                newNetworkLayer.ConnectLayers(NetworkLayers.Last());
            }
            NetworkLayers.Add(newNetworkLayer);
        }
Пример #3
0
        public List <double> GetOutputs(Glass Input)
        {
            SetNeuralNetworkInputValues(Input);
            List <double> outputValues = new List <double>();

            foreach (var layer in NetworkLayers)
            {
                layer.PerformCalculation();
            }
            foreach (var neuron in NetworkLayers.Last().NetworkNeurons)
            {
                outputValues.Add(neuron.getValue());
            }
            return(outputValues);
        }
Пример #4
0
        public void CalculateNewWeigths(List <double> outputs, List <double> correct_outputs)
        {
            //double newWeight = weight - LearningRate * ((outputs - correct_outputs)* synpas.fromNeuron.value);
            for (int i = 0; i < outputs.Count; i++)
            {
                foreach (var synape in NetworkLayers.Last().NetworkNeurons[i].Inputs)
                {
                    double curOutput = NetworkLayers.Last().CalcActivation(NetworkLayers.Last().NetworkNeurons[i].CalcOutput());
                    double delta     = synape.NeuronFrom.currentValue * (correct_outputs[i] - curOutput) * LearningRate * curOutput * (1 - curOutput);
                    synape.Delta = (outputs[i] - correct_outputs[i]) * outputs[i] * (1 - outputs[i]) * synape.NeuronFrom.currentValue;
                    //if(newWeights.Count <= i)
                    //{
                    //    newWeights.Add(delta);
                    //}
                    //else
                    //{
                    //    newWeights[i] = (newWeights[i] + delta) / 2;
                    //}

                    //var nodeDelta = (correct_outputs[i] - outputs[i]) * outputs[i] * (1 - outputs[i]);
                    //var delta = -1 * synape.NeuronFrom.currentValue * nodeDelta;
                    //synape.NewWeight = synape.Weight - LearningRate * nodeDelta;
                    //synape.NewWeight = synape.Weight - LearningRate * ((outputs[i] - correct_outputs[i]));
                    //double previouseWeigths = synape.NewWeight;
                }
            }
            for (int j = NetworkLayers.Count - 2; j > 0; j--)
            {
                foreach (var neuron in NetworkLayers[j].NetworkNeurons)
                {
                    foreach (var synapse in neuron.Inputs)
                    {
                        synapse.Delta = synapse.NeuronFrom.currentValue * synapse.NeuronTo.currentValue * (1 - synapse.NeuronTo.currentValue) * GetAllDeltas(synapse);
                        //synapse.Weight += synapse.NeuronFrom.currentValue * (correct_outputs[i] - outputs[i]) * LearningRate * outputs[i] * (1 - outputs[i]);


                        //double sumPartial = GetPrSynapsesWeigt(synapse.NeuronTo);
                        //synapse.NewWeight = synapse.Weight - LearningRate * ((outputs[i] - correct_outputs[i]) * synapse.NeuronFrom.getValue());
                        //double previouseWeigths = synapse.NewWeight;
                    }
                }
            }
        }