示例#1
0
  /**
   * O algoritmo de retropropagação matricial (Ver a interface Mat)
   *
   * @param entradas as entradas da rede
   * @param e o erro obtido durante o feedForward da rede com 'entradas'
   */
  private void backward(double[] entradas, double[] e) {
    double[][] m = new double[1][0];
    double[][] deltaW;
    double[] deltaB;

    m[0] = e;

    for (int i = camada.length - 1; i > 0; i--) {
      m = Mat.produto(Mat.diag(Mat.dfSigmoide(camada[i].getSaida())), m);
      deltaB = m[0];
      deltaW = Mat.transp(Mat.kProduto(Mat.transp(camada[i - 1].getSaida()), m));
      m = Mat.produto(camada[i].w, m);
      atualizaCamada(i, deltaW, deltaB);
    }

    m = Mat.produto(Mat.diag(Mat.dfSigmoide(camada[0].getSaida())), m);
    deltaB = m[0];
    deltaW = Mat.transp(Mat.kProduto(Mat.transp(entradas), m));

    atualizaCamada(0, deltaW, deltaB);
  }