public void CreaCapas(int[] NeuronasPorCapa, Random azar) { Capas = new List <Capa>(); for (int i = 0; i < NeuronasPorCapa.Length; i++) { if (i == 0 && i == (NeuronasPorCapa.Length - 1)) { Capas.Add(new Capa(NeuronasPorCapa[i], Entradas.GetLength(1), azar, 2)); } else if (i == 0) { Capas.Add(new Capa(NeuronasPorCapa[i], Entradas.GetLength(1), azar, 1)); } else if (i == (NeuronasPorCapa.Length - 1)) { Capas.Add(new Capa(NeuronasPorCapa[i], NeuronasPorCapa[i - 1], azar, 2)); } else { Capas.Add(new Capa(NeuronasPorCapa[i], NeuronasPorCapa[i - 1], azar, 1)); } } }
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]; } } } }