public void Train_WithoutInvalidOutputNeuronIds_ThrowsException() { // Arrange var trainingIteration = new NetworkTrainingIteration(); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 0 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 1 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 2 }); // 2 output neurons trainingIteration.Outputs.Add(new NetworkTrainingOutput() { NeuronId = 8 }); trainingIteration.Outputs.Add(new NetworkTrainingOutput() { NeuronId = -1 }); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); // Act _network.Train(_trainingIterations); }
public void Train_WithoutOutputsForEachOutputNeuron_ThrowsException() { // Arrange var trainingIteration = new NetworkTrainingIteration(); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 0 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 1 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 2 }); trainingIteration.Outputs.Add(new NetworkTrainingOutput()); _trainingIterations.Add(trainingIteration); // Act _network.Train(_trainingIterations); }
public void Train_WithNullDatasetOutputs_ThrowsException() { // Arrange var trainingIteration = new NetworkTrainingIteration { Outputs = null }; trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 0 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 1 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 2 }); _trainingIterations.Add(trainingIteration); // Act _network.Train(_trainingIterations); }
public void Train_WithEmptyDatasetInputs_ThrowsException() { // Arrange var trainingIteration = new NetworkTrainingIteration(); _trainingIterations.Add(trainingIteration); // Act _network.Train(_trainingIterations); }
public void Train_WithValidDataset_ReturnsImprovingCosts() { //for (int i = 0; i < 1000; i++) //{ // Arrange var trainingIteration = new NetworkTrainingIteration(); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 0, ActivationLevel = .75 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 1, ActivationLevel = .75 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 2, ActivationLevel = .75 }); // 2 output neurons trainingIteration.Outputs.Add(new NetworkTrainingOutput() { NeuronId = 8, ExpectedActivationLevel = .25 }); trainingIteration.Outputs.Add(new NetworkTrainingOutput() { NeuronId = 9, ExpectedActivationLevel = .25 }); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); // Act _network.RandomizeNetwork(); var trainingIterations = _network.Train(_trainingIterations).ToList(); // Assert var lastTrainingSet = trainingIterations.First(); foreach (var trainingSet in trainingIterations) { Assert.IsTrue(trainingSet.TrainingCost <= lastTrainingSet.TrainingCost); lastTrainingSet = trainingSet; } //} }
public void Train_WithValidDataset_UpdatesWeightsAndBiases() { // Arrange var trainingIteration = new NetworkTrainingIteration(); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 0, ActivationLevel = .75 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 1, ActivationLevel = .75 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 2, ActivationLevel = .75 }); // 2 output neurons trainingIteration.Outputs.Add(new NetworkTrainingOutput() { NeuronId = 8, ExpectedActivationLevel = .25 }); trainingIteration.Outputs.Add(new NetworkTrainingOutput() { NeuronId = 9, ExpectedActivationLevel = .25 }); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); var inputNeuron = _network.Layers.First().Neurons.First(); var inputNeuronOutgoingConnection = inputNeuron.Connections.OfType <IOutgoingConnection>().First(); var neuronBiasBefore = inputNeuron.Bias; var connectionWeightBefore = inputNeuronOutgoingConnection.Weight; // Act _network.RandomizeNetwork(); _network.Train(_trainingIterations); // Assert Assert.IsTrue(neuronBiasBefore != inputNeuron.Bias); Assert.IsTrue(connectionWeightBefore != inputNeuronOutgoingConnection.Weight); }
public void Train_WithValidDataset_ReturnsIterationCosts() { // Arrange var trainingIteration = new NetworkTrainingIteration(); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 0, ActivationLevel = .75 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 1, ActivationLevel = .75 }); trainingIteration.Inputs.Add(new NetworkTrainingInput() { NeuronId = 2, ActivationLevel = .75 }); // 2 output neurons trainingIteration.Outputs.Add(new NetworkTrainingOutput() { NeuronId = 8, ExpectedActivationLevel = .25 }); trainingIteration.Outputs.Add(new NetworkTrainingOutput() { NeuronId = 9, ExpectedActivationLevel = .25 }); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); _trainingIterations.Add(trainingIteration); // Act _network.RandomizeNetwork(); var costs = _network.Train(_trainingIterations); // Assert Assert.IsNotNull(costs); Assert.IsTrue(costs.Count() == 5); }
/// <summary> /// Converts each of the <paramref name="source"/> items to a trainingIteration. /// </summary> /// <param name="source">The source dataset that is to be converted to training iterations.</param> /// <returns>Returns the converted <paramref name="source"/> items as trainingIterations.</returns> private IEnumerable <INetworkTrainingIteration> ConvertToTrainingIterations(IEnumerable <GetTrainingDataset_Result> source) { var trainingIterations = new List <INetworkTrainingIteration>(); if (source != null && source.Count() >= 1) { var properties = source.First().GetType().GetProperties(); var inputProperties = properties.Where(p => p.Name.StartsWith("I_")); var outputProperties = properties.Where(p => p.Name.StartsWith("O_")); // Convert each dataset entry into a network training iteration foreach (var entry in source) { var trainingIteration = new NetworkTrainingIteration(); // Dynamically add all inputs foreach (var inputProperty in inputProperties) { trainingIteration.Inputs.Add(new NetworkTrainingInput() { ActivationLevel = (bool)inputProperty.GetValue(entry) ? 1.0 : 0.0, Description = inputProperty.Name }); } // Dynamically add all outputs foreach (var outputProperty in outputProperties) { trainingIteration.Outputs.Add(new NetworkTrainingOutput() { ExpectedActivationLevel = (bool)outputProperty.GetValue(entry) ? 1.0 : 0.0, Description = outputProperty.Name }); } trainingIterations.Add(trainingIteration); } } return(trainingIterations); }