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();
        }
    }