public double[,] What() { double[,] a1 = capaIn.propForward(); for (int i = 0; i < capasOc.GetLength(0); i++) { capasOc[i] = new Capa(noNeuronas[i + 1], a1); capasOc[i].setFunction(function[i + 1]); a1 = capasOc[i].propForward(); } capaOut = new Capa(noNeuronas[noCapasOc + 1], a1); capaOut.setFunction(function[noCapasOc + 1]); a1 = capaOut.propForward(); printOut(a1); return(a1); }
public void TrainRNA() { double[,] a1 = capaIn.propForward(); pesosSin = new PesosSin(noCapasOc + 2); pesosSin.setPesos(0, capaIn.getPesos()); for (int i = 0; i < capasOc.GetLength(0); i++) { capasOc[i] = new Capa(noNeuronas[i + 1], a1); capasOc[i].setFunction(function[i + 1]); a1 = capasOc[i].propForward(); pesosSin.setPesos(i + 1, capasOc[i].getPesos()); } capaOut = new Capa(noNeuronas[noCapasOc + 1], a1); capaOut.setFunction(function[noCapasOc + 1]); a1 = capaOut.propForward(); pesosSin.setPesos(noCapasOc + 1, capaOut.getPesos()); printOut(a1); vError = getError(a1); printOut(vError); double[,] a12 = new double[a1.GetLength(0), a1.GetLength(1)]; for (int i = 0; i < vError.GetLength(0); i++) { for (int j = 0; j < vError.GetLength(1); j++) { a12[i, j] = (-2) * vError[i, j]; } } for (int i = noCapasOc + 1; i >= 0; i--) { if (i == noCapasOc + 1) { sen[i].getSen(a12, a1); } else { if (i == noCapasOc) { sen[i].getSen(capasOc[i - 1].getVOut(), capaIn.getPesos(), sen[i + 1]); } else if (i == 0) { sen[i].getSen(capaOut.getVOut(), capaOut.getPesos(), sen[i + 1]); } else { sen[i].getSen(capasOc[i - 1].getVOut(), capasOc[i].getPesos(), sen[i + 1]); } } } capaOut.actPesos(restaMatrix(capaOut.getPesos(), multMatrix(multMatrix2(alfa, sen[noCapasOc + 1].getThisSen()), trans(capasOc[noCapasOc - 1].getVOut())))); for (int i = noCapasOc - 1; i >= 0; i--) { if (i > 0) { capasOc[i].actPesos(restaMatrix(capasOc[i].getPesos(), multMatrix2(alfa, multMatrix(sen[i + 2].getThisSen(), trans(capasOc[i - 1].getVOut()))))); } else { capasOc[i].actPesos(restaMatrix(capasOc[i].getPesos(), multMatrix2(alfa, multMatrix(sen[i + 2].getThisSen(), trans(capaIn.getVOut()))))); } } capaIn.actPesos(restaMatrix(capaIn.getPesos(), multMatrix2(alfa, multMatrix(sen[0].getThisSen(), trans(vIn))))); int ii = 0; while (ii < 50) { ii++; for (int i = 0; i < vError.GetLength(0); i++) { for (int j = 0; j < vError.GetLength(1); j++) { a12[i, j] = (-2) * vError[i, j]; } } for (int i = noCapasOc + 1; i >= 0; i--) { if (i == noCapasOc + 1) { sen[i].getSen(a12, a1); } else { if (i == noCapasOc) { sen[i].getSen(capasOc[i - 1].getVOut(), capaIn.getPesos(), sen[i + 1]); } else if (i == 0) { sen[i].getSen(capaOut.getVOut(), capaOut.getPesos(), sen[i + 1]); } else { sen[i].getSen(capasOc[i - 1].getVOut(), capasOc[i].getPesos(), sen[i + 1]); } } } capaOut.actPesos(restaMatrix(capaOut.getPesos(), multMatrix(multMatrix2(alfa, sen[noCapasOc + 1].getThisSen()), trans(capasOc[noCapasOc - 1].getVOut())))); for (int i = noCapasOc - 1; i >= 0; i--) { if (i > 0) { capasOc[i].actPesos(restaMatrix(capasOc[i].getPesos(), multMatrix2(alfa, multMatrix(sen[i + 2].getThisSen(), trans(capasOc[i - 1].getVOut()))))); } else { capasOc[i].actPesos(restaMatrix(capasOc[i].getPesos(), multMatrix2(alfa, multMatrix(sen[i + 2].getThisSen(), trans(capaIn.getVOut()))))); } } capaIn.actPesos(restaMatrix(capaIn.getPesos(), multMatrix2(alfa, multMatrix(sen[0].getThisSen(), trans(vIn))))); aproxRNA(); } }