Generar pesos y umbrales en una red neuronal

11
Innovación y Futuro Jair Ospino Ardila Generar pesos y umbrales de forma aleatoria en una red neuronal

Transcript of Generar pesos y umbrales en una red neuronal

Page 1: Generar pesos y umbrales en una red neuronal

Innovación y Futuro

Jair Ospino Ardila

Generar pesos y umbrales de forma aleatoria en una red

neuronal

Page 2: Generar pesos y umbrales en una red neuronal

Tomemos como ejemplo una red neuronal multicapa que se compone de la

siguiente estructura donde tenemos:

Figura 1. Red neuronal multicapa

Una capa de entrada con 2 neuronas

Una capa oculta con tres neuronas

Una capa de salida con dos neuronas

Una matriz de pesos (Iw) entre las neuronas de entradas y la primera

capa culta

Unos umbrales en la primera capa y la capa de salida, cada uno

compuestos por la cantidad de neuronas de cada capa

Una matriz de pesos (Lw) entre la primera capa y la capa de salida

Nota: lo primordial para este tipo de problemas más que saber programar es tener claro como está compuesta nuestra red neuronal.

Campo de prueba: Dependiendo del tipo de red conocemos o no las entradas y salidas. Esto se debe a que existen redes supervisadas y no supervisadas. Para nuestro ejemplo planteamos que es una red supervisada donde conocemos las entradas y salidas.

Nos ocuparemos en esta ocasión de generar los pesos y los umbrales de forma

aleatoria.

Page 3: Generar pesos y umbrales en una red neuronal

Utilizaremos la herramienta de Visual Studio.Net para la creación de nuestro proyecto, bajo el lenguaje de programación Visual Basic.

Utilizando Vectores Para crear vectores de forma dinámica en Visual Basic, lo que debemos hacer

es crear una variable tipo vector de forma vacía, de tal modo que podamos

asignarle un tamaño cualquiera en determinado momento.

En este caso hemos creado los vectores que almacenaran los umbrales de la

capa oculta U1 y de la capa de salida U2.

Utilizando Matrices Para crear Matrices de forma dinámica en Visual Basic, lo que debemos hacer

es crear una variable tipo Matriz de forma vacía, de tal modo que podamos

asignarle un tamaño cualquiera en determinado momento.

Nota: Como en nuestro caso las neuronas van a contener valores numéricos no enteros, lo ideal es que declaremos estos vectores con un tipo de datos que almacene datos no enteros

Page 4: Generar pesos y umbrales en una red neuronal

Creando vector para la capa Oculta y capa de Salida Para que sea mucho más dinámica nuestra creación de pesos y umbrales

crearemos un vector que nos almacene la cantidad de neuronas por cada capa.

Hemos creado un vector con el nombre de capas que almacenará las neuronas

de la capa oculta y la capa de salida. Aunque son dos capas en Visual Basic la

primera posición de un vector empieza en cero (0), de tal manera que a las

posiciones que deseamos que tenga un vector le restamos uno.

Es decir, que en la posición cero (capas (0)) guardará las neuronas de la capa

oculta y en la posición uno (capas (1)) guardara las neuronas de la capa de

salida. Se puede apreciar que: en el caso que nuestra red neuronal tenga n

capas la última posición del vector es la capa de salida y si además estamos

preguntándonos que ¿si nuestra red tiene n capas como hacemos para incluir

las neuronas de las otras capas? La respuesta está en que el vector que

hayamos creado no debe tener las posiciones fijas sino también vacías para

poder asignarles el valor correspondiente a la cantidad de capas.

Creación del formulario grafico

Page 5: Generar pesos y umbrales en una red neuronal

Para mirar de forma interactiva crearemos un formulario de tal forma que

podamos visualizar los procesos dentro de la red.

Creando la matriz de pesos Iw y Lw

Como se puede apreciar en la Figura 1, los pesos Iw se forman a partir de las

entradas con las neuronas de la primera capa, es decir con la posición cero del

vector capas (0) y la matriz Lw se forma a partir de el vector en la posición

cero y las salidas es decir el vector en la posición final.

Damos doble clic sobre el botón Generar para empezar con nuestra

creación

Nota: se recomienda validar los campos antes de realizar cualquier procedimiento, no se hace en esta guía para que no sea muy extensa. Esto se debe hacer debido a que las matrices y vectores van a manejar números y no letras y a demás se necesitan datos en los objetos del formulario

Lo primero que haremos es llenar el vector y redimensionar las matrices

a los valores especificados en el formulario.

Page 6: Generar pesos y umbrales en una red neuronal

Creación y recorrido de la matriz Iw

Creación y recorrido de la matriz Lw

Nota: en los anteriores códigos, lo que hacemos es crear las matrices de pesos y asignarle a los objetos del formulario (MatrizIw, MatrizLw) las posiciones del recorrido de la matriz. Estos no son los valores de los pesos. Esto se hizo para ver que las matrices se han creado de forma correcta y que cada posición corresponde a la requerida.

Page 7: Generar pesos y umbrales en una red neuronal

Si ejecutamos la aplicación tendremos hasta ahora una matriz de posiciones.

Creando Valores de pesos para las matrices Iw Como los pesos deben estar contenidos dentro de un rango establecido de [-

1,1], lo que haremos será un artificio matemático para conseguir esos valores.

Creando Valores de pesos para las matrices Lw Como los pesos deben estar contenidos dentro de un rango establecido de [-

1,1], lo que haremos será un artificio matemático para conseguir esos valores.

Page 8: Generar pesos y umbrales en una red neuronal

Artificio Matemático: Para entender nuestro artificio matemático hay que tener en cuenta que la función Rnd() solo genera números en el rango de [0,1] es decir entre 0 y 1. Al multiplicarlo por el límite superior tendremos 2 Al multiplicarlo por el límite inferior tendremos 0 Ahora si a ambos números le restamos 1 tendremos que: Lim Superior (2 - 1) = 1 Lim Inferior (0 - 1) = -1 Obteniendo así el rango que deseamos [-1,1]

Nota: Es indispensable que el programador tenga conocimientos matemáticos para resolver problemas que tengan que ver con métodos numéricos. Ya que la mayoría de aplicaciones desarrolladas en un lenguaje de programación incluyen muchos artificios y formulas matemáticas.

Si ejecutamos nuestra aplicación tendremos hasta ahora los pesos que

estábamos buscando.

Page 9: Generar pesos y umbrales en una red neuronal

Creando Valores de Umbrales U1 y U2

Como los umbrales son las neuronas de cada capa, lo que demos hacer es

tomar el valor de cada neurona por capa y asignárselo al vector

correspondiente de cada umbral.

Tendremos al igual que las matrices redimensionar de forma dinámica los

vectores de los umbrales.

Page 10: Generar pesos y umbrales en una red neuronal

Ahora al ejecutar nuestra aplicación ya hemos conseguido nuestro propósito

en esta guía. Obtener los pesos y umbrales de una red neuronal multicapa.

Page 11: Generar pesos y umbrales en una red neuronal

Creado por Jair Ospino Ardila Correo [email protected] Fecha 11/04/2013 Lugar Valledupar – Cesar País Colombia Creado en Visual Studio 2010 professional_x86 Lenguaje Visual Basic.NET Sistema Operativo Windows 7

Para ver más visita:

http://innovacionyfuturo.wordpress.com/tutoriales/inteligencia-artificial/