/** * train * trains the network from given inputs and target outputs * @param inputs, List<List<double>> a list of input Lists * @param targets, List<List<double>> a list of corresponding target Lists */ public void Train(List <List <double> > inputs, List <List <double> > targets, TrainingAlgorithmFactory.TrainingAlgorithmType trainingAlgorithmType = TrainingAlgorithmFactory.TrainingAlgorithmType.HoldBestInvestigate) { var algorithm = TrainingAlgorithmFactory.CreateAlgoRithm(trainingAlgorithmType); algorithm.Train(this, inputs, targets); }
public static Network CreateNetwork(Data trainingData, int numLayers, int perLayer, TrainingAlgorithmFactory.TrainingAlgorithmType algorithm) { //Create hidden layers var hidden = new List <int>(); for (var i = 0; i < numLayers; i++) { hidden.Add(perLayer); } //Create Network var network = new Network(trainingData.DataPoints[0].Inputs.Count, hidden, trainingData.DataPoints[0].Outputs.Count); //New network with 5 inputs, One hidden layer of 2 neurons, 1 output //TODO: Training should be a seperate call <- this might explain the over fitting aswell //Train the network //network.Train(trainingData.Inputs(), trainingData.Outputs(), algorithm); return(network); }
public static string RunTestNetwork(Data data, Func <List <double>, List <double>, bool> successCondition, Func <List <double>, List <double> > deconvert, int numLayers, int perLayer, int epoch, int algorithmNumber, int callbackNumber, TrainingAlgorithmFactory.TrainingAlgorithmType algorithm, Func <Data, Tuple <Data, Data> > dataDelineationCallback, bool saveReport = true) { //Deliniate data var dataTuple = dataDelineationCallback(data); var trainingData = dataTuple.Item1; var testingData = dataTuple.Item2; //Create hidden layers var hidden = new List <int>(); for (var i = 0; i < numLayers; i++) { hidden.Add(perLayer); } //Create Network Network network = new Network(trainingData.DataPoints[0].Inputs.Count, hidden, trainingData.DataPoints[0].Outputs.Count); network.MaxEpochs = epoch; //Start a stopwatch var stopWatch = new Stopwatch(); stopWatch.Start(); //Train the network network.Train(trainingData.Inputs(), trainingData.Outputs(), algorithm); Network.Save(network); //Stop the stopwatch stopWatch.Stop(); //Test if (saveReport) { SaveReport(testingData, successCondition, deconvert, network); } var successes = testingData.Inputs().Select(t => network.Run(t)).Where((result, i) => successCondition(result, testingData.DataPoints[i].Outputs)).Count(); return(String.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}", network.Id, numLayers, perLayer, epoch, algorithmNumber, callbackNumber, Math.Round((successes / (double)testingData.DataPoints.Count) * 100, 2), (double)stopWatch.ElapsedMilliseconds / 1000)); }