Upload
jair-ospino-ardila
View
192
Download
9
Embed Size (px)
DESCRIPTION
programamos la forma de como general los pesos y umbrales en una red neuronal en el lenguaje de programación visual basic
Citation preview
God bless
Generar pesos y umbrales de forma aleatoria en una red neuronal
Tomemos como ejemplo una red neuronal multicapa que se compone de la
anterior estructura donde tenemos:
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 oculta
Unos umbrales en la primera capa y la capa de salida, cada uno
compuestos por la cantidad de neuronas por 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.
God bless
Campo de prueba
Dependiendo del tipo de red conocemos o no las entradas y salidas. Esto
debido a que existen redes supervisadas y no supervisadas. Para nuestro
ejemplo planteamos que es una red supervisada sonde conocemos la
entradas y salidas de modo que no hay que lidiar con eso ya que las
conocemos y en el caso de tener que utilizarlas solo bastaría con asignarles
esos valores a unas variables y listo.
Nos ocuparemos en esta ocasión de generar los pesos y los umbrales de
forma aleatoria.
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 tenemos que
hacer es crear una variable tipo vector de forma vacía, de tal modo que
podamos asignarle un tamaño cualquiera en cualquier momento.
En este caso hemos creado los vectores que almacenaran los umbrales de la
capa oculta U1 y de la capa de salida U2.
God bless
Utilizando Matrices
Para crear Matrices de forma dinámica en Visual Basic, lo que tenemos que
hacer es crear una variable tipo Matriz de forma vacía, de tal modo que
podamos asignarle un tamaño cualquiera en cualquier 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.
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
God bless
manera que a las posiciones que deseamos que tenga un vector le restamos
uno.
Estamos diciendo 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. Si se puede apreciar 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; pues 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
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 estructura grafica de nuestra red, 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
God bless
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 aburrida. 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.
God bless
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.
God bless
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.
God bless
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.
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]
God bless
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.
God bless
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.
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.
God bless
God bless
Creado por
Jair Ospino Ardila
Correo
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 Home Basic
Nota: Si deseas el archivo fuente envía un mensaje al correo
solicitándolo. Sin ningún costo solo conserva los créditos. En el fuente
ya se encuentran validados los campos para el mejor funcionamiento
del programa.