/// <summary>
        /// Zwaraca odpowiedzi sieci dla
        /// danego zbioru testowego
        /// </summary>
        /// <param name="testSet"></param>
        /// <returns></returns>
        public int[] Compute(InputDataSet testSet)
        {
            if (testSet.InputDataSize != network.InputCount)
                throw new PerceptronWrapperException("Invalid arguments");

            return testSet.InputSet
                        .Select(input => new BasicMLData(input))
                        .Select(d => network.Winner(d))
                        .ToArray();
        }
        /// <summary>
        /// Na podstawie wag sieci zwaraca odpowiedzi dla zbioru testowego
        /// </summary>
        /// <param name="testSet"></param>
        /// <returns></returns>
        public double[][] Compute(InputDataSet testSet)
        {
            if (testSet.InputDataSize != _network.InputCount)
                throw new PerceptronWrapperException("Invalid arguments");

            List<double[]> answers = new List<double[]>();
            foreach(double[] input in testSet.InputSet) {
                double[] output = new double[_network.OutputCount];
                _network.Compute(input, output);
                answers.Add(output);
            }
            return answers.ToArray();
        }
        /// <summary>
        /// Uczy siec Kohonena z podanymi parametrami.
        /// </summary>
        /// <param name="learningRate">Początkowy współczynnik nauki.</param>
        /// <param name="learningChangeRate">Współczynnik zmiany współczynnika nauki</param>
        /// <param name="neighbourhoodRate">Początkowy współczynnik sąsiedztwa.</param>
        /// <param name="neighbourhoodChangeRate">Współczynnik zmiany współczynnika sąsiedztwa.</param>
        /// <param name="trainIterations">Na ilu przykladach przebiega nauka.</param>
        /// <param name="learningSet">Zbiór danych uczących.</param>
        public void Train(double learningRate, double learningChangeRate,
            double neighbourhoodRate, double neighbourhoodChangeRate,
            int trainIterations, InputDataSet learningSet)
        {
            var basicMlDataSet = new BasicMLDataSet(learningSet.InputSet, null);
            INeighborhoodFunction neighborhoodFunc =
                new KohonenNeighbourhoodFunction(neighbourhoodRate, rows, columns);
            var train = new BasicTrainSOM(network, learningRate, basicMlDataSet, neighborhoodFunc);
            IStrategy strategy = new KohonenTrainStrategy(learningChangeRate, neighbourhoodChangeRate);
            strategy.Init(train);
            train.Strategies.Add(strategy);

            train.Iteration(trainIterations);
            train.FinishTraining();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="learningRate">Stala uczenia (zwykle w okolicach 0.1)</param>
        /// <param name="epochNumber">Na ilu wybranych losowo przykladach uczyc siec</param>
        /// <param name="momentum">Współczynnik bezwładności.</param>
        /// <param name="dataSet">Dane do nauki sieci</param>
        public void Train(double learningRate, int epochNumber,
            double momentum, InputDataSet dataSet)
        {
            if (learningRate <= 0.0 || epochNumber <= 0)
                throw new PerceptronWrapperException("Invalid arguments");
            if (_network.InputCount != dataSet.InputDataSize ||
                _network.OutputCount != dataSet.OutputDataSize ||
                dataSet.InputDataCount <= 0)
                    throw new PerceptronWrapperException("Invalid data set size");

            IMLDataSet data = new BasicMLDataSet(dataSet.InputSet, dataSet.OutputSet);
            var backprop = new Backpropagation(_network, data, learningRate, momentum);

            // Uczymy siec za pomoca backpropagation
            backprop.Iteration(epochNumber);
            // :) - Prosciej sie nie da
        }
Esempio n. 5
0
        private static void BuildKohonenNetwork(KohonenNetwokConfig config, string trainFile, string testFile)
        {
            KohonenWrapper kohonen = new KohonenWrapper(config.Height, config.Width, config.InputSize);

            InputDataSet trainData = new InputDataSet(trainFile, config.InputSize);
            kohonen.Train(config.InitialLearningRate, config.LearningRateDecayFactor,
                config.InitialNeighbourhood, config.NeighbourhoodDecayFactor,
                config.Iterations, trainData);

            InputDataSet testData = new InputDataSet(testFile, config.InputSize);
            int[] classes = kohonen.Compute(testData);

            foreach (var i in classes) {
                Console.Write("({0}): ", i);
                for (int k = 0; k < config.InputSize; k++)
                    Console.Write("{0:F3} ", kohonen.network.Weights.Data[k][i]);
                Console.WriteLine();
            }
        }
Esempio n. 6
0
        private static void BuildPerceptronNetwork(PerceptronNetworkConfig config, string trainFile, string testFile)
        {
            PerceptronWrapper perceptron = new PerceptronWrapper(
                config.InputSize, config.HiddenLayerSizes, config.OutputSize,
                config.UseBIAS, config.Unipolar
                );

            InputDataSet trainData = new InputDataSet(trainFile, config.InputSize, config.OutputSize);
            perceptron.Train(config.LearningRate, config.Iterations, config.Momentum, trainData);

            InputDataSet testData = new InputDataSet(testFile, config.InputSize);
            double[][] results = perceptron.Compute(testData);

            foreach (var outputs in results) {
                foreach (var output in outputs) {
                    Console.Write("{0:F3} ", output);
                }
                Console.WriteLine();
            }
        }