Mostrando entradas con la etiqueta Redes Neuronales Artificiales. Mostrar todas las entradas
Mostrando entradas con la etiqueta Redes Neuronales Artificiales. Mostrar todas las entradas

20 de noviembre de 2012

Proyecto de Redes Neuronales

Redes Neuronales Artificiales
Presentación Final: Reporte y Programa

Este es el reporte final para la materia de Redes Neuronales Artificiales, en la cual estuve trabajando en el proyecto de Reconocimiento de Personas Mediante Voz, en conjunto con mis compañeros Cecilia Urbina y Roberto Martínez.

El objetivo del proyecto fue crear un sistema funcional que permita identificar si un usuario es el correcto o no, mediante su voz. Esto dentro de un sistema que muestre una ventana y que de un texto que tendrá que ser leído por la persona que intenta autentificarse, el audio es captado y analizado, y crea una entrada de datos a la red neuronal la cual se encargara de decir en su salida si el usuario fue identificado o no, y mostrar el resultado finalmente mediante una ventana.

Trabajo grupal


En la siguiente captura se muestran los commits realizados en Octubre y Noviembre desde una semana después de haber presentado el examen de medio curso, y con esto podemos crear evidencia del trabajo realizado.



Estuvimos haciendo cambios en el código que ya teníamos hasta la mitad del curso, de ahí en adelante fueron cambios que tuvieron que ver con la separación del código en clases.

Entre las clases que creamos están la de la Neurona y la de la Red, en las cuales se definen la cantidad de neuronas a utilizar y donde se hace el proceso de generación del vector de pesos, así como el aprendizaje de la Neurona.

Entre los cambios que podemos resaltar, y que se puede evidenciar mediante los últimos commits tenemos:
  • Separación del código en clases
  • Análisis con PCA
  • Creación de la clase interfaz
  • Aprendizaje con dos neuronas
  • Generación de un vector de pesos bueno
  • Reconocimiento funcional


Código


El código completo y las partes en las que yo contribuí están en el repositorio, enseguida se encuentra la liga directa.


El siguiente es el código de la clase Neurona, donde estuve haciendo algunas modificaciones para que fuera útil para el programa que inicia el aprendizaje y el programa que verifica los usuarios que necesita recibir la salida generada por la neurona.


Vídeo demostración


El siguiente vídeo muestra el funcionamiento de dos neuronas que separan cuatro clases, con datos generados con una versión más reciente el programa generador de vectores de entrada.


Presentación en equipo


Integrantes del equipo:


13 de noviembre de 2012

Sistema de Seguridad usando Redes Neuronales

Redes Neuronales
Lectura Científica

Lectura completa por Obaidat en el siguiente enlace:
A Multilayer Neural Network System for Computer Access Security

El uso de redes neuronales es muy amplio en sistemas computacionales, que van desde aplicaciones para clasificar datos, procesamiento de señales, reconocimiento de texto, reconocimiento de voz, encontrar personas o rostros en una imagen o fotografía cancelación de ruido, redes de telecomunicaciones, entre otros.

Uno de los usos actuales de una red neuronal es el reconocimiento de personas como sistema de seguridad en una computadora. Esto se hace con el fin de restringir acceso a personas no autorizadas para usar una computadora. Podemos imaginar el administrador de los servidores de un sistema bancario trabajando desde su computadora en un escritorio del lugar donde trabaja, luego esta persona se va por un café o al baño, y mientras el dejó sola la computadora donde trabajaba, una segunda persona llega y empieza a hacer acciones indebidas en el sistema, evidentemente esto implica un gran problema, ya que seguramente esta segunda persona lo esta haciendo con malos fines. Entonces si la computadora tuviera un sistema que pueda lograr reconocer a una persona mediante como esta escribe en el teclado, el sistema podría bloquear todo acceso a la computadora si encuentra que la persona que actualmente escribe en el teclado no es la que habitualmente hace uso de ella.

http://muyseguridad.net/wp-content/uploads/2010/11/tecleando.jpg

Un sistema como el propuesto es posible tenerlo no solo en una computadora de escritorio o portátil, es también aplicable a dispositivos móviles, con el único inconveniente que para este sistema es necesario una red neuronal que analice datos en tiempo real, y muchos dispositivos móviles seguramente no estén preparados para un análisis complejo de datos en un periodo de tiempo razonable.

¿Cómo se hace esto con una red neuronal?

EL uso que se le da a esta aplicación en una red neuronal es mejor reconocido como reconocimiento de patrones. Los datos que se dan como vectores de entrada a la red neuronal son los intervalos de tiempo entre las pulsaciones que se hacen en el teclado mientras escriben una secuencia conocida de caracteres.

Una red neuronal para la clasificación de patrones debe de tener los siguientes elementos básicos:

  • Un grupo de unidades simples para procesamiento.
  • Un estado de activación inicial por cada unidad.
  • Función de salida para cada unidad.
  • Una regla de propagación.
  • Una regla de activación.
  • Una regla de aprendizaje.
  • Cada elemento esta relacionado con un peso en el vector de pesos.
  • Cada elemento produce una activación y una propagación de error.

Ya sabemos que el vector de entrada a la red neuronal esta dado por el tiempo que la persona se tarda en presionar entre una tecla y otra. Se necesita una red neuronal que tenga varias neuronas en la capa de entrada, en donde cada neurona analizará una unidad de datos del correspondiente vector de entrada.

Una capa oculta no necesariamente con la misma cantidad de neuronas que en la capa de entrada y una capa de salida con una cantidad de neuronas proporcional a la capa oculta anterior.

http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=293498

El aprendizaje para este tipo de red neuronal es mediante un cambio en el vector de pesos, como se suele hacer normalmente, y existe una regla de propagación de errores que ayuda a obtener un vector de pesos que dará una salida cercana a lo ideal.

La salida de cada neurona de la capa de salida, nos deberá proporcionar un vector de salida diferente para cada persona, y comparado con un vector anteriormente obtenido con la persona que usualmente hace uso de cierta computadora, es posible determinar si es la misma o es una persona diferente, y así determinar si es necesario bloquear el uso de la computadora o no.

Referencia
A Multilayer Neural Network System for Computer Access Security

8 de octubre de 2012

Proyecto de Redes Neuronales

Redes Neuronales Artificiales
Presentación Intermedia: Reporte y Programa

Este es el reporte de medio curso para la materia de Redes Neuronales Artificiales, en la cual estoy trabajando en el proyecto de Reconocimiento de Personas Mediante Voz, en conjunto con mis compañeros Cecilia Urbina y Roberto Martínez.

El objetivo del proyecto es que al final del semestre tengamos un sistema funcional que permita identificar si un usuario es el correcto o no, mediante su voz. Esto dentro de un sistema que muestre una ventana y que de un texto que tendrá que ser leído por la persona que intenta autentificarse, el audio es captado y analizado, y crea una entrada de datos a la red neuronal la cual se encargara de decir en su salida si el usuario fue identificado o no, y mostrar el resultado finalmente mediante una ventana.

Trabajo grupal


En la siguiente captura se muestran los commits realizados desde la semana en que conformamos el equipo, y con esto podemos crear evidencia del trabajo realizado. En base a esto explicaré que fue lo que se ha hecho en conjunto y lo que yo he hecho.



En las primeras semanas se trabajo conforme a lo que íbamos viendo en clase, que trataba de crear el programa que recibía desde línea de comandos entradas binarias, para el vector de entradas y creábamos el vector de pesos aleatorio. La modificación del primer código fue en base a lo que Cecilia trabajo en hacer una clase especial para lo que en un futuro sería la neurona simple.

Luego tuvimos algunas sesiones en las que trabajamos en conjunto en cuanto al aprendizaje de la neurona, hasta este momento no teníamos alguna forma de comprobar si lo que estábamos haciendo estaba bien o no. El código modificado fue subido en un commit mostrado con el nombre Equipo, para mostrar que ahí trabajamos todos.

En las semanas pasadas dividimos el trabajo para poder avanzar un poco más, entonces Cecilia se encargó de empezar con la interfaz de entrada y el pre-procesamiento del audio, yo me encargué de continuar con el código de la neurona, hacer que aprendiera y verificar que estaba funcionando como debería, Roberto se encargó de agregar el uso de Tkinter para poder visualizar el aprendizaje de la neurona, y la ventana que arrojará el sistema cuando lo demás este completo.

Código relevante


Los siguientes códigos son solo una fracción del código completo, para mostrar algunas partes elementales.

En la siguiente sección mostrada, es parte del código del programa generador, en este caso ya que nos enfocamos un poco para solo dos dimensiones, cuando se pide al programa que genere un numero de muestras para un vector de entrada de dos dimensiones con su salida esperada, este las crea y guarda en un archivo. Para poder determinar la salida se hace una comparación, pero para evitar que sea algo que siempre de el mismo resultado coloque dos variables de ruido esto con el fin de que la salida esperada de los vectores de entrada no siempre cree la misma gráfica dividida transversalmente.


La siguiente parte es solo la muestra resumida de lo que hace el código al mandarle los datos de entrada a la neurona y las operaciones que hace, para cuando modifique el código que habíamos trabajado en equipo esta parte sufrió grandes cambios ya que anteriormente no se había tomado en cuenta el umbral dentro del vector de pesos.


Aportes


En seguida concretizo el trabajo que realicé, en unas cuantas líneas:
  • Reestructurar el código de la clase Neurona.
  • Cambiar la entrada de datos a números flotantes.
  • Modificar la entrada manual de datos a la lectura de un archivo.
  • Corrección del método de aprendizaje.
  • Conteo de errores cuando se mantiene esta activo el método de aprendizaje.
  • Graficar la salida correcta de los datos creados por el generador con Gnuplot.
  • Graficar los datos obtenidos después del aprendizaje con la neurona.
  • Mejora del código después del agregado de visualización con Tkinter.
  • Corrección de bugs después del agregado de visualización.

Gráficas generadas con Gnuplot


Gráfica generada con los datos tal y como los crea el generador, esto sirve de referencia para saber si lo que la neurona hará tiene una salida semejante que divida las dos clases tal y como en la imagen.


Tomando los datos generados desde la neurona, podemos ver los puntos con salida esperada 0 y los puntos con salida esperada 1, y estos con un contorno de color verde cuando al momento de comparar la activación con cero, el resultado no dío igual que el esperado, y al final se pinta la línea creada con los datos arrojados por el vector de pesos.


Vídeo demostración


El siguiente vídeo muestra el funcionamiento de la neurona ya con interfaz gráfica con Tkinter y después de las correcciones aplicadas.

En el vídeo se muestra una terminal donde se ejecuta el programa generador de los vectores de entrada y su salida esperada, y luego se usan los archivos generados para correr el programa de la neurona, que inicia un proceso de aprendizaje, modificando el vector de pesos, para llegar a separar en dos clases los puntos con salida esperada 0 y los puntos con salida esperada 1.


Presentación en equipo


Integrantes del equipo:



5 de agosto de 2012

Aplicación de una Red Neuronal

Redes Neuronales
Reporte 1

Reconocimiento de personas mediante voz


"Un sistema de reconocimiento de voz es una herramienta computacional capaz de procesar la señal de voz emitida por el ser humano y reconocer la información contenida en ésta, convirtiéndola en texto o emitiendo órdenes que actúan sobre un proceso."


Los sistemas de reconocimiento de habla diseñados para dar órdenes a un computador se llaman control por comandos. Estos sistemas reconocen un vocabulario muy reducido, lo que incrementa su rendimiento.

La idea es crear un programa para reconocimiento de personas mediante la voz, la cual puede ser usado en varios panoramas, en mi caso la idea es usarlo específicamente en una casa inteligente, la cual el sistema pida que diga alguna frase a la persona que llegue a la casa y esta identifique cuál de los habitantes es el que ha llegado, y así crear acciones inmediatas que frecuentemente hace esta persona, como el encender las luces del cuarto o encender la computadora.

Una de las librerías que puede ser utilizada para el preprocesamiento de la voz es python-pocketsphinx.

Identificar texto en imágenes


"Proceso dirigido a la digitalización de textos, los cuales identifican automáticamente a partir de una imagen símbolos o caracteres que pertenecen a un determinado alfabeto, para luego almacenarlos en forma de datos, asi podremos interactuar con estos mediante un programa de edición de texto o similar."


Existen en el mercado de aplicaciones móviles varias opciones que nos permiten tomar fotografías a un póster o libro, y luego se busca en la imagen la incidencia de texto el cual puede ser traducido directamente en la imagen o procesado para copiarlo directo a un archivo de texto. Entonces la idea es hacer mediante una red neuronal el reconocimiento de caracteres para esta obtención de texto.

Podía ser algo redundante y de lo cual ya hay muchas aplicaciones que lo hacen o incluso librerías que facilitan este reconocimiento, pero lo importante es aprender a hacerlo.

Para esto existe una herramienta que podría ser de gran ayuda con el nombre de PyTesser.

Páginas consultadas:
PyTesser
Reconocimiento de voz
Reconocimiento de caracteres