public RedNeuronal(double[,] salidasDeseadas, int patrones, double[,] entradas, int BackPropagation = 0) { this.Patrones = patrones; CantidadEntradas = entradas.GetLength(1); CantidadSalidas = salidasDeseadas.GetLength(1); MapEntradas(entradas); MapSalidasDeseadas(salidasDeseadas); ErroresLinealUltimaCapa = new double[CantidadSalidas]; MayoresEntradas = new double[Entradas.GetLength(1)]; MayoresSalidas = new double[SalidasDeseadas.GetLength(1)]; NormalizarPatrones(); variacionRealDeseada = new double[CantidadSalidas * 2]; this.AlgoritmoEntrenamiento = BackPropagation; }
private void NormalizarPatrones() { BuscarMayores(); for (int i = 0; i < Entradas.GetLength(0); i++) { for (int j = 0; j < Entradas.GetLength(1); j++) { Entradas[i, j] /= MayoresEntradas[j]; } } for (int i = 0; i < SalidasDeseadas.GetLength(0); i++) { for (int j = 0; j < SalidasDeseadas.GetLength(1); j++) { SalidasDeseadas[i, j] /= MayoresSalidas[j]; } } }
private void BuscarMayores() { for (int i = 0; i < Entradas.GetLength(0); i++) { for (int j = 0; j < Entradas.GetLength(1); j++) { if (Entradas[i, j] > MayoresEntradas[j]) { MayoresEntradas[j] = Entradas[i, j]; } } } for (int i = 0; i < SalidasDeseadas.GetLength(0); i++) { for (int j = 0; j < SalidasDeseadas.GetLength(1); j++) { if (Math.Abs(SalidasDeseadas[i, j]) > Math.Abs(MayoresSalidas[j])) { MayoresSalidas[j] = SalidasDeseadas[i, j]; } } } }