Exemplo n.º 1
0
        /*
         * Calcula distância euclidiana do padrão de entrada
         */
        public double GetEuclideanDistance(DataSetObject pattern)
        {
            double dist = 0;

            if (pattern.GetInputLenght() != weights.Length)
            {
                throw new Exception("Incorrect data format!");
            }
            else
            {
                double[] inputWeights = pattern.GetInput();

                if (weights.Length != inputWeights.Length)
                {
                    throw new Exception("Incorrect data format!");
                }
                else
                {
                    for (int x = 0; x < weights.Length; x++)
                    {
                        dist += ((inputWeights[x] - weights[x]) * (inputWeights[x] - weights[x]));
                    }
                }
            }
            return(dist);
        }
Exemplo n.º 2
0
        /*
         * Dado um padrão de entrada e uma variável de aprendizado, atualiza os pesos do neurônio
         */
        public void UpdateWeights(DataSetObject pattern, double learningRate)
        {
            if (pattern.GetInputLenght() != weights.Length)
            {
                throw new Exception("Incorrect data format!");
            }
            else
            {
                double[] inputWeights = pattern.GetInput();

                for (int i = 0; i < inputWeights.Length; i++)
                {
                    weights[i] += learningRate * (inputWeights[i] - weights[i]);
                }
            }
        }
Exemplo n.º 3
0
        /*
         * Método de aprendizado da Rede
         */
        public void Learn(DataSet trainingSet)
        {
            if (trainingSet.GetOutputSize() != this.outputLayerSize || trainingSet.GetInputSize() != this.inputLayerSize)
            {
                throw new Exception("Incorrect data format!");
            }
            else
            {
                bool learned = false;
                List <DataSetObject> patterns = trainingSet.GetList();
                for (int it = 1; learned == false && it <= maxIterationNumber; it++)
                {
                    //VAI APRESENTANDO OS PADRÕES, DE FORMA ALTERNADA, ATÉ QUE TODOS ATINJAM O ERRO REQUERIDO.
                    int allPatternOK = 0;
                    for (int p = 0; p < patterns.Count; p++)
                    {
                        DataSetObject pattern = patterns[p];

                        //INJETA O PADRÃO NA ENTRADA DA REDE.
                        ApplyPattern(pattern.GetInput());

                        //PROPAGA
                        DoPropagation();

                        if (CalculateStopError(pattern.GetTargetOutput()) > this.Error)
                        {
                            DoBackPropagation(pattern.GetTargetOutput());
                        }
                        else
                        {
                            allPatternOK++;
                        }

                        if (allPatternOK == patterns.Count)
                        {
                            learned = true;
                        }

                        iterationNumber = it;
                    }
                }
            }
        }