コード例 #1
0
        public void Train()
        {
            // Read all training data and transforming them.
            trainingData = new DataSetReader(Parameter.TrainingFile,
                                             Parameter.InputSize, Parameter.TargetSize);
            double[][] data, target;
            trainingData.ReadAll(out data, out target);
            for (int i = 0; i < trainingData.Count; ++i)
            {
                // transform input level 1
                for (int j = 0; j < Parameter.InputSize; ++j)
                {
                    data[i][j] = inputTransformers1[j].TransformToValue(data[i][j]);
                }
                // transform input level 2
                data[i] = inputTransformers2.TransformToDimension(data[i]);

                // transform target
                target[i] = targetTransform.TransformToDimension(target[i]);
            }

            oldArtAWeights = new List <double[]>();
            bool isWeightsChanged = true, completedLimited = false;

            // Order input and target pattern before.
            if (param.Mode == ProcessModifiedHybridFuzzyARTMapMode.EXTERNAL ||
                param.Mode == ProcessModifiedHybridFuzzyARTMapMode.DUAL)
            {
                mcoa.OrderSequence(data, target);
            }
            do
            {
                SaveOldWeights();

                // Training ordered fuzzy art map
                if (param.Mode == ProcessModifiedHybridFuzzyARTMapMode.EXTERNAL)
                {
                    fartmap.Run(data, target);
                }
                else
                {
                    mfartmap.Run(data, target);
                }

                double mseValue = CalculateMse();
                if (mseValue < Parameter.LimitedMseValue)
                {
                    isWeightsChanged = false;
                }

                performanceCounter.Increment();

                if (param.LimitedEpochs != 0 &&
                    param.LimitedEpochs <= performanceCounter.Count)
                {
                    completedLimited = true;
                }
            }while (!completedLimited && isWeightsChanged);
        }
コード例 #2
0
        public void Train()
        {
            // Read all training data and transforming them.
            trainingData = new DataSetReader(Parameter.TrainingFile,
                                             Parameter.InputSize, Parameter.TargetSize);
            double[][] data, target;
            trainingData.ReadAll(out data, out target);
            for (int i = 0; i < trainingData.Count; ++i)
            {
                // transform input level 1
                for (int j = 0; j < Parameter.InputSize; ++j)
                {
                    data[i][j] = inputTransformers1[j].TransformToValue(data[i][j]);
                }
                // transform input level 2
                data[i] = inputTransformers2.TransformToDimension(data[i]);

                // transform target
                target[i] = targetTransform.TransformToDimension(target[i]);
            }

            oldArtAWeights = new List <double[]>();
            bool isWeightsChanged = true, completedLimited = false;

            do
            {
                SaveOldWeights();

                // Training ordered fuzzy art map
                network.Run(data, target);

                double mseValue = CalculateMse();
                if (mseValue < Parameter.LimitedMseValue)
                {
                    isWeightsChanged = false;
                }
                performanceCounter.Increment();
                if (parameter.LimitedEpochs != 0 &&
                    parameter.LimitedEpochs <= performanceCounter.Count)
                {
                    completedLimited = true;
                }
            }while (!completedLimited && isWeightsChanged);
        }
コード例 #3
0
        public void Train()
        {
            oldArtAWeights = new List <double[]>();
            bool isWeightsChanged = true, completedLimited = false;

            do
            {
                SaveOldWeights();
                trainingData = new DataSetReader(Parameter.TrainingFile,
                                                 Parameter.InputSize, Parameter.TargetSize);
                double[] data   = new double[Parameter.InputSize];
                double[] target = new double[Parameter.TargetSize];
                while (trainingData.Read(data, target))
                {
                    // transform input level 1
                    for (int i = 0; i < Parameter.InputSize; i++)
                    {
                        data[i] = inputTransformers1[i].TransformToValue(data[i]);
                    }
                    // transform input level 2
                    double[] dataInput = inputTransformers2.TransformToDimension(data);

                    // transform target
                    double[] targetInput = targetTransform.TransformToDimension(target);

                    network.Run(dataInput, targetInput);
                }
                double mseValue = CalculateMse();
                if (mseValue < Parameter.LimitedMseValue)
                {
                    isWeightsChanged = false;
                }
                performanceCounter.Increment();
                if (parameter.LimitedEpochs != 0 &&
                    parameter.LimitedEpochs <= performanceCounter.Count)
                {
                    completedLimited = true;
                }
            }while (!completedLimited && isWeightsChanged);
        }
コード例 #4
0
ファイル: ModifiedFuzzyARTMap.cs プロジェクト: VVK-3/nnsharp
        private void Process()
        {
            double[] choicingValues = ComputeChoicingValues(input,
                                                            categories, numberOfCategories, choicingParam);;

            int targetClass = 0;

            if (mode == "TRAIN")
            {
                targetClass = (int)rtf.TransformToValue(target);
            }

            int  category      = 0;
            bool nonprediction = false;
            bool uncommited    = false;
            bool testVigilance = false;

            while (!testVigilance)
            {
                category = MaxChoicingValues(choicingValues);

                if (mode == "TRAIN")
                {
                    if (category != -1)
                    {
                        double vigilance = ComputeVigilance(input, categories[category]);
                        if (vigilance >= vigilances[category])
                        {
                            mm.Increment(category, targetClass);
                            double entropy = esa.Compute(category);

                            if (entropy > maximumEntropy)
                            {
                                mm.Decrement(category, targetClass);
                                choicingValues[category] = 0;
                            }
                            else
                            {
                                testVigilance = true;
                            }
                        }
                        else
                        {
                            choicingValues[category] = 0;
                        }
                    }
                    else
                    {
                        category = NewCategory();
                        mm.Increment(category, targetClass);
                        uncommited    = true;
                        testVigilance = true;
                    }
                }

                if (mode == "TEST")
                {
                    if (category != -1)
                    {
                        double vigilance = ComputeVigilance(input, categories[category]);
                        if (vigilance < vigilances[category])
                        {
                            choicingValues[category] = 0;
                        }
                    }
                    else
                    {
                        nonprediction = true;
                    }
                    testVigilance = true;
                }
            }

            if (mode == "TRAIN")
            {
                AdjustWeight(input, category, weightAdjustRate, uncommited);
            }

            if (mode == "TEST")
            {
                if (!nonprediction)
                {
                    bool success = false;
                    if (categoryTargetClasses != null)
                    {
                        if (category >= 0 && category < numberOfCategories)
                        {
                            output  = tf.TransformToDimension(new double[] { categoryTargetClasses[category] });
                            success = true;
                        }
                    }
                    if (!success)
                    {
                        output = null;
                    }
                }
                else
                {
                    output = NONPREDICT_OUTPUT;
                }
            }
        }