public Entrada treinar(Entrada entrada, double txAprendizado, double desejado, int classe, double pesoBias, double bias) { entrada.Peso = entrada.Peso + (txAprendizado * (desejado - classe) * entrada.Valor); pesoBias = (pesoBias + txAprendizado * (desejado - classe) * bias); this.Peso = entrada.Peso; return entrada; }
public int Perceptron(Entrada[] entrada, double bias, double pesoBias) { double soma = 0; int classe; //soma foreach (Entrada x in entrada) { soma += x.Valor * x.Peso; } soma += bias * pesoBias; if (soma >= 0) { classe = 1; } else { classe = -1; } return classe; }
//Sobreescrever public int Perceptron(Entrada[] entrada, double bias, double pesoBias, double desejado, int limite) { double soma = 0; int classe; bool erro = true; int count = 0; //soma do{ erro = false; foreach (Entrada x in entrada) { soma += x.Valor * x.Peso; } soma += bias * pesoBias; if (soma >= limite) { classe = 1; } else { classe = -1; } if (classe != desejado) { erro = true; foreach (Entrada x in entrada) { x.treinar(x, 0.5, desejado, classe, pesoBias, bias); } } count++; } while (erro == true || count < 3000); return classe; }
static void Main(string[] args) { //Random rdn = new Random(); //Entrada x1 = new Entrada(); //Entrada x2 = new Entrada(); ////valores //x1.Valor = 0.0462; //x2.Valor = 0.0548; ////bias //double bias = 1; //double pesoBias = rdn.NextDouble(); //Console.WriteLine(x1.Peso); //Entrada[] x = new Entrada[2] { x1, x2 }; //Rede redeP = new Rede(); //int classe = redeP.Perceptron(x, bias, pesoBias, -1, 0); //if(classe == 1){ // Console.WriteLine("Neuronio 1"); //} else { // Console.WriteLine("Neuronio 2"); //} //Entrada y1 = new Entrada(); //Entrada y2 = new Entrada(); //y1.Valor = 0.0665; //y2.Valor = 0.0572; //y2.Peso = x1.Peso; //y2.Peso = x2.Peso; //Entrada[] y = new Entrada[2] { y1, y2 }; //Rede redeQ = new Rede(); //int classe2 = redeP.Perceptron(y, bias, pesoBias, 1, 0); //if (classe2 == 1) //{ // Console.WriteLine("Neuronio 1"); //} //else //{ // Console.WriteLine("Neuronio 2"); //} //Entrada z1 = new Entrada(); //Entrada z2 = new Entrada(); //z1.Valor = 0.0665; //z2.Valor = 0.0572; //y2.Peso = x1.Peso; //y2.Peso = x2.Peso; //Entrada[] z = new Entrada[2] { z1, z2 }; //Rede redeU = new Rede(); //int classe3 = redeP.Perceptron(y, bias, pesoBias); //if (classe3 == 1) //{ // Console.WriteLine("Neuronio 1"); //} //else //{ // Console.WriteLine("Neuronio 2"); //} //Entrada a1 = new Entrada(); //Entrada a2 = new Entrada(); //a1.Valor = 0.1; //a1.Valor = 0.1; //a1.Peso = x1.Peso; //a2.Peso = x2.Peso; //Entrada[] a = new Entrada[2] { a1, a2 }; //int classeA = redeP.Perceptron(a, bias, pesoBias); //if (classeA == 1) //{ // Console.WriteLine("Neuronio 1"); //} //else //{ // Console.WriteLine("Neuronio 2"); //} Entrada x1 = new Entrada(); Entrada x2 = new Entrada(); Entrada x3 = new Entrada(); x1.Valor = 0; x2.Valor = 0; x3.Valor = 1; x1.Peso = 0.4; x2.Peso = -0.6; x3.Peso = 0.6; double bias = -1; double pesoBias = 0.5; double txAprendizagem = 0.5; string classes; Entrada[] x = new Entrada[3] { x1, x2, x3 }; Rede rede = new Rede(); int classe = rede.Perceptron(x, bias, pesoBias, -1, 0); Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classe); x1.Valor = 1; x2.Valor = 1; x3.Valor = 0; classe = rede.Perceptron(x, bias, pesoBias, 1, 0); Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classe); x1.Valor = 1; x2.Valor = 1; x3.Valor = 1; classe = rede.Perceptron(x, bias, pesoBias); if (classe == 1) { classes = "Classe 1"; } else { classes = "Classe 0"; } Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classes); x1.Valor = 0; x2.Valor = 0; x3.Valor = 0; classe = rede.Perceptron(x, bias, pesoBias); if (classe == 1) { classes = "Classe 1"; } else { classes = "Classe 0"; } Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classes); x1.Valor = 1; x2.Valor = 0; x3.Valor = 0; classe = rede.Perceptron(x, bias, pesoBias); if (classe == 1) { classes = "Classe 1"; } else { classes = "Classe 0"; } Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classes); x1.Valor = 0; x2.Valor = 1; x3.Valor = 1; classe = rede.Perceptron(x, bias, pesoBias); if (classe == 1) { classes = "Classe 1"; } else { classes = "Classe 0"; } Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classes); Console.Read(); }
static void Main(string[] args) { //Random rdn = new Random(); //Entrada x1 = new Entrada(); //Entrada x2 = new Entrada(); ////valores //x1.Valor = 0.0462; //x2.Valor = 0.0548; ////bias //double bias = 1; //double pesoBias = rdn.NextDouble(); //Console.WriteLine(x1.Peso); //Entrada[] x = new Entrada[2] { x1, x2 }; //Rede redeP = new Rede(); //int classe = redeP.Perceptron(x, bias, pesoBias, -1, 0); //if(classe == 1){ // Console.WriteLine("Neuronio 1"); //} else { // Console.WriteLine("Neuronio 2"); //} //Entrada y1 = new Entrada(); //Entrada y2 = new Entrada(); //y1.Valor = 0.0665; //y2.Valor = 0.0572; //y2.Peso = x1.Peso; //y2.Peso = x2.Peso; //Entrada[] y = new Entrada[2] { y1, y2 }; //Rede redeQ = new Rede(); //int classe2 = redeP.Perceptron(y, bias, pesoBias, 1, 0); //if (classe2 == 1) //{ // Console.WriteLine("Neuronio 1"); //} //else //{ // Console.WriteLine("Neuronio 2"); //} //Entrada z1 = new Entrada(); //Entrada z2 = new Entrada(); //z1.Valor = 0.0665; //z2.Valor = 0.0572; //y2.Peso = x1.Peso; //y2.Peso = x2.Peso; //Entrada[] z = new Entrada[2] { z1, z2 }; //Rede redeU = new Rede(); //int classe3 = redeP.Perceptron(y, bias, pesoBias); //if (classe3 == 1) //{ // Console.WriteLine("Neuronio 1"); //} //else //{ // Console.WriteLine("Neuronio 2"); //} //Entrada a1 = new Entrada(); //Entrada a2 = new Entrada(); //a1.Valor = 0.1; //a1.Valor = 0.1; //a1.Peso = x1.Peso; //a2.Peso = x2.Peso; //Entrada[] a = new Entrada[2] { a1, a2 }; //int classeA = redeP.Perceptron(a, bias, pesoBias); //if (classeA == 1) //{ // Console.WriteLine("Neuronio 1"); //} //else //{ // Console.WriteLine("Neuronio 2"); //} Entrada x1 = new Entrada(); Entrada x2 = new Entrada(); Entrada x3 = new Entrada(); x1.Valor = 0; x2.Valor = 0; x3.Valor = 1; x1.Peso = 0.4; x2.Peso = -0.6; x3.Peso = 0.6; double bias = -1; double pesoBias = 0.5; double txAprendizagem = 0.5; string classes; Entrada[] x = new Entrada[3] { x1, x2, x3 }; Rede rede = new Rede(); int classe = rede.Perceptron(x, bias, pesoBias, -1, 0); Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | "+ classe); x1.Valor = 1; x2.Valor = 1; x3.Valor = 0; classe = rede.Perceptron(x, bias, pesoBias, 1, 0); Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classe); x1.Valor = 1; x2.Valor = 1; x3.Valor = 1; classe = rede.Perceptron(x, bias, pesoBias); if (classe == 1) { classes = "Classe 1"; } else { classes = "Classe 0"; } Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classes); x1.Valor = 0; x2.Valor = 0; x3.Valor = 0; classe = rede.Perceptron(x, bias, pesoBias); if (classe == 1) { classes = "Classe 1"; } else { classes = "Classe 0"; } Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classes); x1.Valor = 1; x2.Valor = 0; x3.Valor = 0; classe = rede.Perceptron(x, bias, pesoBias); if (classe == 1) { classes = "Classe 1"; } else { classes = "Classe 0"; } Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classes); x1.Valor = 0; x2.Valor = 1; x3.Valor = 1; classe = rede.Perceptron(x, bias, pesoBias); if (classe == 1) { classes = "Classe 1"; } else { classes = "Classe 0"; } Console.WriteLine("Padrão: " + x1.Valor + " " + x2.Valor + " " + x3.Valor + " | " + classes); Console.Read(); }