private static void BackProgagate() { OutLayer.CalculateErrors(); HidLayer.CalculateErrors(); HidLayer.AdjustWeights(); InLayer.AdjustWeights(); }
public static void Test() { Console.WriteLine("Starts to test the neural network ..."); InitializeConfusionMatrix(); var gesamtElemente = 0; var korrekteElemente = 0; foreach (var image in TestData) { gesamtElemente++; SetNeuronValueFromImage(image.Data); //Image data wird in InputLayer eingelesen SetDesiredValueFromLabel(image.Label); //LabelDaten werden im OutputLayer gespeichert für späteren Vergleich FeedForward(); for (var i = 0; i < OutLayer.DesiredValues.Length; i++) { if (OutLayer.DesiredValues[i].CompareTo(1) != 0) { continue; } if (OutLayer.GetHighestNeuronIndex() == i) { korrekteElemente++; } } ConfusionMatrix[(int)image.Label, OutLayer.GetHighestNeuronIndex()]++; } Console.WriteLine("Creating Confusion-Matrix ..."); var accuracy = ((double)korrekteElemente * (double)100 / (double)gesamtElemente); PrintConfusionMatrix(); Console.WriteLine($"Accuracy: {accuracy} %"); }
private void isModelParametersValid() { if (Network[0].Type == LayerType.Custom) { return; } //the last layer in the network should be output if (Network.Last().Param1.ToString() != OutLayer.First().Dimension) { throw new Exception("The output dimension of the last layer in the network must be same as label dimension!"); } if (Network.Where(x => x.Param1 <= 0 && (x.Type != LayerType.Normalization && x.Type != LayerType.Drop)).Count() > 0) { throw new Exception("Layer cannot be defined with zero output dimension.!"); } if (Network.Where(x => x.Param2 <= 0 && (x.Type == LayerType.LSTM || x.Name.StartsWith("CudaStacked"))).Count() > 0) { throw new Exception("Layer cannot be defined with zero output dimension.!"); } }
private static void FeedForward() { InLayer.CalculateNeuronValues(); HidLayer.CalculateNeuronValues(); OutLayer.CalculateNeuronValues(); }