public void UpdateAllSynapsesByAverage() { for (int i = 0; i < 7; i++) { foreach (var synapse in NetworkLayers.Last().NetworkNeurons[i].Inputs) { //synapse.Weight += newWeights[i]; } } }
public void AddLayer(int NeuronCount) { NetworkLayer newNetworkLayer = new NetworkLayer(); newNetworkLayer.AddLayer(NeuronCount); if (NetworkLayers.Count > 0) { newNetworkLayer.ConnectLayers(NetworkLayers.Last()); } NetworkLayers.Add(newNetworkLayer); }
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); }
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; } } } }