Ejemplo n.º 1
0
        public void SimpleNeuralNetworkTest()
        {
            var takeN = 100;

            var xPath        = FileManagerTest.GetTestDataByName("HandwrittenDigit", "dataX.csv");
            var doubleReader = new CsvDoubleReader();
            var xArray       = doubleReader.GetData(xPath, ",");
            var x            = new Matrix(xArray.Take(takeN));

            var yPath     = FileManagerTest.GetTestDataByName("HandwrittenDigit", "datay.csv");
            var intReader = new CsvIntReader();
            var yArray    = intReader.GetData(yPath, ",").Take(takeN).ToArray();
            var y         = MatrixUtils.VectorToBinaryMatrix(yArray.Select(z => z[0]).ToArray(), 10);

            var neuralNetworkParameters = new SimpleNeuralNetworkParameters()
            {
                Alpha           = 1,
                HiddenLayerSize = 25,
                InputLayerSize  = 400,
                IterationCount  = 10,
                LabelCount      = 10,
                Lambda          = 1,
                X = x,
                Y = y,
            };

            var neuralNetwork        = new SimpleNeuralNetwork();
            var neuralNetworkResults = neuralNetwork.Compute(neuralNetworkParameters);

            var prediction = neuralNetwork.Predict(neuralNetworkResults.Theta1, neuralNetworkResults.Theta2, x, x.RowCount);
        }
Ejemplo n.º 2
0
        static void Train_predict_and_save(string filepath)
        {
            // train & testing data
            var training_data = new Dictionary <int, Tuple <float[], float[]> >
            {   //                                               ys                  xs
                [0] = new Tuple <float[], float[]>(new float[] { 0, 1 }, new float[] { 1 }),
                [1] = new Tuple <float[], float[]>(new float[] { 1, 0 }, new float[] { 1 }),
                [2] = new Tuple <float[], float[]>(new float[] { 0, 0 }, new float[] { 0 }),
                [3] = new Tuple <float[], float[]>(new float[] { 1, 1 }, new float[] { 0 })
            };

            var snn = new SimpleNeuralNetwork(2, 0.4f, Activation.FunctionsEnum.Sigmoid);

            snn.Add(4);
            snn.Add(1);

            // train
            Console.WriteLine("Entrenamiento:\n");
            Random random = new Random();
            int    j      = 0;

            Console.WriteLine("Training ...");
            for (int i = 0; i < 100000; i++)
            {
                j = random.Next(4);
                snn.Train(training_data[j].Item1, training_data[j].Item2);
            }

            // predict
            Console.WriteLine("\nPredicciones:\n");
            for (int i = 0; i < 4; i++)
            {
                var res = snn.Predict(training_data[i].Item1);
                Console.WriteLine(string.Format("xs [ {0}, {1} ] = {2}", training_data[i].Item1[0], training_data[i].Item1[1], res[0]));
            }


            SimpleNeuralNetwork.Save(snn, filepath);
            Console.WriteLine("\nRed Neuronal guardada !!.\n");
        }