Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Proyecto Red Neuronal, Apuntes de Inteligencia Artificial

Proyecto de red neuronal Avanzadas

Tipo: Apuntes

2018/2019

Subido el 21/11/2019

harry-vega
harry-vega 🇲🇽

1 documento

1 / 17

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Universidad Nacional Autónoma de México
FACULTAD DE INGENIERÍA
Integrantes:
Leal Giorguli Andrés
Melgar Peral Ricardo
Trejo Linares Alfonso
Materia: Aprendizaje
Proyecto Final
México CDMX. 11/junio/2018
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Vista previa parcial del texto

¡Descarga Proyecto Red Neuronal y más Apuntes en PDF de Inteligencia Artificial solo en Docsity!

Universidad Nacional Autónoma de México

FACULTAD DE INGENIERÍA

Integrantes:

Leal Giorguli Andrés

Melgar Peral Ricardo

Trejo Linares Alfonso

Materia: Aprendizaje

Proyecto Final

México CDMX. 11/junio/

Introducción:

En los últimos años la inteligencia artificial viene brindando soluciones en muchos aspectos del quehacer humano, por ejemplo en economía, administración, medicina, física, arte, etc. Uno de los temas de la IA que ha alcanzado trascendental importancia es redes neuronales artificiales y en dicho tema, una de las aplicaciones más importantes es el reconocimiento de patrones. En este proyecto presentaremos un modelo de una red neuronal artificial para el reconocimiento de patrones utilizando el lenguaje de programación java.

Explicación teórica:

Estructura de los modelos RNA

McCulloch y Pitts en 1943 construyeron un modelo abstracto y simple de una neurona artificial, que es una unidad de cálculo que modela el comportamiento de una neurona natural. Este modelo es elemento básico y esencial de procesamiento y construcción de una red neuronal artificial. Generalmente el comportamiento de las neuronas biológicas es de tipo no lineal, y esto lo hace interesante, porque no se resuelven con las técnicas convencionales, aunque existe algún comportamiento de tipo lineal.

Características de la neurona i

Una neurona tiene cinco partes fundamentales que se describen a continuación (Bonifacio Martin, Alfredo Sanz):

Conjunto de entradas

xj (t) (x1, x2,x3, ... xn)

Conjunto de Pesos, denominado pesos sinápticos de la neurona i, denotado por wij (wi1, wi2, ... win) , es la intensidad de interacción entre cada neurona presináptica j y la neurona postsinápíica i.

Función de propagación (también se denomina función de excitación). Representa el valor del potencial postsináptico:

Por otro lado, si el peso es positivo, la conexión se llama excitatoria, quiere decir, que tendera a excitar a la neurona postsináptica. Si es negativo se llama inhibitoria, tendera a inhibirla

Función de activación Proporciona el estado de la activación actual

ai(t) = fi(ai(t-1), hi(t))

Existen varias funciones de activación, para la investigación se utilizara la función escalón y la función sigmoidal.

Código utilizado:

En nuestro proyecto utilizamos 4 clases llamadas:

Neuron

RedNeuronal

RedNeuronal

Sigmoide

Todas en el lenguaje java.

Neuron

package redneuronal;

public class Neuron {

double activacionu;

double [] entradas;

double [] pesos;

double errorNodo;

static Sigmoide sigmoide;

public Neuron(int nentradas){

pesos=new double[nentradas];

entradas=new double[nentradas];

sigmoide= new Sigmoide();

errorNodo=0;

}

public void activacion(){

double suma=0;

for (int i = 0; i <entradas.length; i++){

suma+=entradas[i]*pesos[i];

}

activacionu=sigmoide.funcion(suma);

}

public double getActivacion(){

return activacionu;

}

public double getError(){

return (errorNodo);

}

public void setError(double Error){

errorNodo=Error;

}

}

RedNeuronal

package redneuronal;

public class RedNeuronal {

static int nodosk=4;

static int nodosj=7;

static RedNeuronal1 redNeuronal = new RedNeuronal1(nodosk,nodosj,9,43);

static double balance=-1;

0,1,1,1,1,0,balance},//

{0,0,1,0,1,0,

0,1,0,0,1,0,

0,1,0,0,1,0,

1,1,1,1,1,1,

0,0,0,0,1,0,

0,0,0,0,1,0,

0,0,0,0,1,0,balance},//

{1,1,1,1,1,1,

1,0,0,0,0,0,

1,1,1,1,1,0,

0,0,0,0,1,0,

0,0,0,0,0,1,

0,0,0,0,1,0,

1,1,1,1,1,0,balance},//

{0,0,1,1,1,0,

0,1,0,0,0,1,

1,0,0,0,0,0,

1,0,1,1,1,0,

1,1,0,0,0,1,

0,1,0,0,0,1,

0,0,1,1,1,0,balance},//

{1,1,1,1,1,1,

1,0,0,0,1,0,

0,0,0,1,1,0,

0,0,0,1,0,0,

0,0,1,1,0,0,

0,0,1,0,0,0,

0,0,1,0,0,0,balance},//

0,1,1,1,1,0,balance},//

{0,1,1,1,1,0,

1,0,0,0,0,1,

1,0,0,0,0,1,

0,1,1,1,1,1,

0,0,0,0,0,1,

1,0,0,0,0,1,

0,1,1,1,1,0,balance}//

};

static double aprender[][]={

//valores binarios de manera vertical 0000, 0001,0010,...,

//compara renglón de capaI con columna aprender

{0,0,0,0,0,0,0,0,1,1,1},

{0,0,0,0,1,1,1,1,0,0,0},

{0,0,1,1,0,0,1,1,0,0,1},

{0,1,0,1,0,1,0,1,0,1,0}

};

public int Verificar(double capaI[][]){

int epoca=0;

redNeuronal.entradasJ(capaI[epoca]);

for (int c = 0; c <7; c++) {

System.out.print(""+Math.round(capaI[epoca][c])+",");

}

System.out.print(" Aprender ");

for (int c = 0; c < nodosk; c++) {

System.out.print(""+Math.round(aprender[c][epoca])+",");

}

System.out.print(" Salida ");

redNeuronal.entradasJ(capaI[epoca]);

redNeuronal.activacionJ();

redNeuronal.entradasK();

redNeuronal.activacionK();

redNeuronal.errorCapaK(aprender, epoca);

for (int c = 0; c < nodosk; c++) {

System.out.print(" "+Math.round(redNeuronal.getActivacionk(c))+",");

}

double decimal=0;

int t=0;

for (int c = nodosk-1; c >=0; c--) {

decimal+=redNeuronal.getActivacionk(c)*Math.pow(2,t);

t++;

}

System.out.println(" decimal "+decimal);

noigual=false;

for (int c = 0; c < nodosk; c++) {

if (redNeuronal.getActivacionk(c)==aprender[c][epoca]) {

}else{

noigual=true;

}

if (noigual) {

i=-1;

redNeuronal.pesos_JK();

redNeuronal.errorCapaJ();

redNeuronal.pesos_IJ();

}

i++;

k++;

}

RedNeuronal

package redneuronal;

public class RedNeuronal1 {

int nodosCapaK;

int entCapak;

int nodosCapaJ;

int entCapaj;

double L=0.5;

double [] entradas;

Neuron [] neuronK,neuronJ;

static double balance=-1;

public void entradasJ(double capaI[]){

for (int j = 0; j < nodosCapaJ; j++) {

for (int i = 0; i < capaI.length; i++) {

neuronJ[j].entradas[i]=capaI[i];

}

}

}

public void activacionJ(){

for (int j = 0; j < nodosCapaJ; j++) {

neuronJ[j].activacion();

}

}

public void activacionK(){

for (int k = 0; k < nodosCapaK; k++) {

neuronK[k].activacion();

}

}

public void entradasK(){

int j;

for (int k = 0; k < nodosCapaK; k++) {

for (j = 0; j < nodosCapaJ; j++) {

neuronK[k].entradas[j]=neuronJ[j].getActivacion();

}

neuronK[k].entradas[j]=balance;

System.out.println(""+neuronK[k].entradas[j]);

public void errorCapaK(double aprender[][],int epoca){

double errorl=0;

for (int k = 0; k < nodosCapaK; k++) {

errorl=(aprender[k][epoca]- neuronK[k].getActivacion())neuronK[k].getActivacion()(1-neuronK[k].getActivacion());

neuronK[k].setError(errorl);

}

}

public void pesos_JK(){

for (int k = 0; k < nodosCapaK; k++) {

for (int i = 0; i < entCapak; i++) {

neuronK[k].pesos[i]+=(LneuronK[k].getError()neuronK[k].entradas[i]);

}

}

}

public void errorCapaJ(){

double suma, errj;

for (int j = 0; j < nodosCapaJ; j++) {

suma=0;

for (int k = 0; k < nodosCapaK; k++) {

suma+=(neuronK[k].getError()*neuronK[k].pesos[j]);

}

errj=(neuronJ[j].getActivacion()(1-neuronJ[j].getActivacion())suma);

neuronJ[j].setError(errj);

Sigmoide

package redneuronal;

**/****


*** @author Ricardo Melgar**

*/

public class Sigmoide {

double e;

double p;

public Sigmoide(){

e=Math.E; p=1;

}

public double funcion(double a){

return(1/(1+(Math.pow(e, -a/p))));

}

}

Funcionamiento:

El programa funciona de manera gráfica con cajas de texto, en las cuales vamos a indicar los valores que se iteraran, para posteriormente realizar el aprendizaje.

El usuario generara los patrones a analizar en la matriz 6X7, el aprendizaje se realiza y ejecuta las iteraciones hasta que sea detenido.

Se ejecuta la red neuronal mostrando el resultado del análisis (el digito si lo reconoció o un signo de interrogación si no le fue posible reconocerlo).

Conclusiones:

Andrés

Fue un proyecto bastante interesante, los modelos matemáticos en que han sido desarrollados los tipos de redes son modelos sencillos, y aunque exigen ciertos conocimientos de cálculo diferencial, pueden ser implementados en cualquier lenguaje de programacion.

Ricardo

Las redes neuronales son una teoría relativamente nueva, que junto a otras técnicas de IA ha generado soluciones confiables a problemas que se presentan en ingeniería, las redes les dan una solución mas fácil y dinámica que la que proporcionan los métodos tradicionales.

Alfonso

Las redes neuronales artificiales presentan grandes ventajas para la resolución de problemas de ingeniería ya que al estar inspirados en modelos biológicos del funcionamiento del cerebro, facilita el estudio y lo hace hasta cierto punto más interesante y dinámico.

Referencias:

http://disi.unal.edu.co/~lctorress/RedNeu/LiRna008.pdf

http://bibing.us.es/proyectos/abreproy/12166/fichero/Volumen+1+- +Memoria+descriptiva+del+proyecto%252F3+-+Perceptron+multicapa.pdf