예제 #1
0
        public Perceptron Treinar(bool verbose = false)
        {
            Console.WriteLine($"Treinando perceptron usando os {QuantTreinamento} primeiros exemplos");
            int epoca = 0, erroTotal;
            var paraTreinar = Exemplos.Take(QuantTreinamento).ToArray();
            var início      = DateTime.Now;

            while (true)
            {
                erroTotal = 0;
                foreach (var exemplo in paraTreinar)
                {
                    var erro = Sinal(exemplo.Saída) - Sinal(Testar(exemplo.Normalizados));
                    if (verbose)
                    {
                        Console.WriteLine($"    Acertou: {(erro == 0 ? "Sim" : "Não")}: {exemplo.ToString(this)}");
                    }
                    Bias += Magnitude * erro;
                    for (int i = 0; i < Entradas; i++)
                    {
                        Pesos[i] += Magnitude * erro * exemplo.Normalizados[i];
                    }
                    erroTotal += erro == 0 ? 0 : 1;
                }
                if (verbose)
                {
                    Console.WriteLine($"Época {epoca}, Total de erros: {erroTotal}\nBias: {Bias.ToString("0.00")}\nPesos: {string.Join(", ", Pesos.Select(p=>p.ToString("0.00")))}");
                }
                if (erroTotal == 0)
                {
                    break;
                }
                else
                {
                    epoca++;
                }
            }
            Console.WriteLine($"Treinamento completo! Levou {epoca} épocas e {(DateTime.Now - início).TotalSeconds} segundos.");
            return(this);
        }