Ejemplo n.º 1
0
        /**
         * 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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }