Нейронные сети в C # с использованием NeuronDotNet - PullRequest
1 голос
/ 27 апреля 2010

Я тестирую библиотеку NeuronDotNet для назначения классов с использованием C #.У меня есть очень простое консольное приложение, которое я использую для тестирования некоторых фрагментов кода, представленных в руководстве для библиотеки, цель задания - научить программу различать случайные точки в квадрате, которые могут или могут бытьне быть внутри круга, который также находится внутри квадрата.Таким образом, в основном, точки внутри квадрата также находятся внутри круга.Вот что у меня есть:

namespace _469_A7
{
    class Program
    {
        static void Main(string[] args)
        {
            //Initlaize the backpropogation network
            LinearLayer inputLayer = new LinearLayer(2);
            SigmoidLayer hiddenLayer = new SigmoidLayer(8);
            SigmoidLayer outputLayer = new SigmoidLayer(2);
            new BackpropagationConnector(inputLayer, hiddenLayer);
            new BackpropagationConnector(hiddenLayer, outputLayer);
            BackpropagationNetwork network = new BackpropagationNetwork(inputLayer, outputLayer);

            //Generate a training set for the ANN
            TrainingSet trainingSet = new TrainingSet(2, 2);

            //TEST: Generate random set of points and add to training set, 
            //for testing purposes start with 10 samples;
            Point p;
            Program program = new Program(); //Used to access randdouble function
            Random rand = new Random();
            for(int i = 0; i < 10; i++)
            {
                //These points will be within the circle radius Type A
                if(rand.NextDouble() > 0.5)
                {
                    p = new Point(rand.NextDouble(), rand.NextDouble());
                    trainingSet.Add(new TrainingSample(new double[2] { p.getX(), p.getY() }, new double[2] { 1, 0 }));
                    continue;
                }
                //These points will either be on the border or outside the circle Type B
                p = new Point(program.randdouble(1.0, 4.0), program.randdouble(1.0, 4.0));
                trainingSet.Add(new TrainingSample(new double[2] { p.getX(), p.getY() }, new double[2] { 0, 1 }));
            }

            //Start network learning
            network.Learn(trainingSet, 100);
            //Stop network learning
            //network.StopLearning();

        }

        //generates a psuedo-random double between min and max 
        public double randdouble(double min, double max)
        {
            Random rand = new Random();
            if (min > max)
            {
                return rand.NextDouble() * (min - max) + max;
            }
            else
            {
                return rand.NextDouble() * (max - min) + min;
            }
        }

    }

    //Class defines a point in X/Y coordinates
    public class Point
    {
        private double X;
        private double Y;

        public Point(double xVal, double yVal)
        {
            this.X = xVal;
            this.Y = yVal;
        }

        public double getX()
        {
            return X;
        }

        public double getY()
        {
            return Y;
        }
    }

}

Это в основном все, что мне нужно, единственный вопрос, который у меня есть, - как обработать вывод ??Более конкретно, мне нужно вывести значение «размера шага» и «импульса», хотя было бы неплохо вывести и другую информацию.Любой, кто имеет опыт использования NeuronDotNet, ценит ваш вклад.

1 Ответ

1 голос
/ 28 апреля 2010

, поскольку у вас есть два выхода, поэтому вы можете получить вывод в текстовом поле, используя следующий код

Output1.Text = Program.Run (новый double [] {... ваши входные данные ....}) [0] .ToString ("0.000000");

Output2.Text = Program.Run (новый double [] {..... ваши входы ...}) [1] .ToString ("0.000000");

...