lunes, 13 de agosto de 2012

Perceptron simple




" Video que demuestra el funcionamiento del programa "


En esta entrada quiero compartirles un ejemplo de perceptron simple hecho en java el cual puede ser usado para que aprenda las compuertas logicas OR y AND.

Este tipo de red puede resolver solamente problemas cuyas salidas estén clasificadas 
en dos categorías diferentes y que permitan que su espacio de entrada sea dividido en regiones linealmente separables:





Las compuertas lógicas AND y OR son linealmente separables, por lo tanto pueden implementarse con un perceptrón. La compuerta lógica XOR no presenta esta característica para esta se tiene que utilizar un perceptron multicapa.


En el siguiente vídeo a partir del minuto 2:40 en adelante se explica paso por paso como se da el aprendizaje de la compuerta lógica OR para un perceptron simple y yo explicare lo mismo pero ya desde un programa hecho en java.


Explicare solo lo mas importante para mas detalles pueden descargarse el código, el codigo ha cambiado un poco solo le agrege una interfaz grafica para que escoger la compuerta logica con la que se probara el perceptron ya sea OR o AND:

  • http://www.mediafire.com/?e788693rqowepoc


Código Fuente:


" Partes Claves del Código Fuente "


 1.- Declaramos las entradas y salidas deseadas:

  • Estructura de las entrada:
Entrada 1, Entrada 2, Umbral
{  x1   ,   x2   ,   -1 }


2.- Declaramos los pesos con los mismos valores que en el vídeo para seguir el ejemplo igual el factor de aprendizaje:




3.- Llamamos al método "funcionActivacion" que recibe por parámetros las primeras 2 entradas (1,1) y se manda también el (-1) para la entrada del umbral y retorna 1 o -1 como lo define la siguiente regla esto que retorne sera la salida obtenida para dichas entradas :






4.- Después se llama al método "error" al  cual se le manda por parámetro la salida deseada y retorna la diferencia de la salida deseada menos la salida obtenida en el método anterior entonces si regresa 0 no hay error en caso contrario si lo hay:





5.- Después si no hay error se sigue con la siguiente entrada(1,-1) y se vuelven a ejecutar los métodos "funcionActivacion" y "error" y si no hay error se sigue con la siguiente entrada (-1,1) ahora si hay error se debe hacer reajuste de pesos llamando al método "calcular pesos" al cual se le manda por parámetros las entradas y la salida deseada:

formula:



Método para Actualizar los Pesos




6.- después de que se  recalculan los pesos se vuelve a pasar todas las entradas desde el inicio al método "funcionActivacion"  y se sigue todo el proceso hasta que ya no salgan errores y al final podremos verificar que realmente aprendió la compuerta lógica OR.                                        





14 comentarios:

  1. disculpa el link para descargar el codigo fuente esta caido. Te agradeceria mucho si pudieras resubirlo.

    ResponderEliminar
  2. busco uno para Perceptron multicapa

    ResponderEliminar
  3. me aparece el siguiente error
    class PerceptronSimple is public, should be declared in a file named PerceptronSimple.java

    ResponderEliminar
    Respuestas
    1. le cambiaste el nombre al archivo?, eso pasa cuando el nombre de la clase y el nombre del archivo no coinciden, solo asegúrate de que tengan el mismo nombre o si le quieres cambiar el nombre al archivo también cámbiaselo a la clase y al constructor!!

      Eliminar
  4. He probado el or y siempre me devuelve 1.

    ResponderEliminar
  5. pregunta:

    si quiero entrenar de nuevo la red??

    ResponderEliminar
  6. yo ocupé este algoritmo con mis excompañeros rubén y ferrusca para evitar que un robot en una simulación virtual se estrelle o bien se atrofié o bien se descomponga su caminar o bien deje de funcionar ante un obstáculo, de manera que por sensor infrarrojo cálculaba sobre los obstáculos que pudieran impedir el seguir su camino, y ocurria una sumatoria o resta en el código de su camino, creo que es el código más simple para implementar con el algoritmo de red neuronal Wj=Wj+e(ti)*Xj .

    ResponderEliminar
  7. P.d.

    Yo quiero implementar la fórmula de redes neuronales para ubicar el aprendizaje en un ser humano que creo que se basa en la noción de un aprendizaje de quien te enseña, quien aprende o bien una persona y bien este aprendizaje creo que podría basarse en escuchar de manera telepática a quien enseño o bien lo que lee una persona por telepátia y tal vez llega a desarrollar de una manera muy propia o en base a como aprendió a hablar ahora bien creo que un robot, desarrollaría lo aprendido en base a la programación de su personalidad y escucharía lo que esperamos que aprenda y bien escucharía también la onda emocional o bien las emociones de la persona que enseña para poder saber como contestar XP, o bien como podría desarrollar un robot su propia inteligencia >-<'', o bien como es que nosotros llegamos a concentrarnos y escuchar a la persona que enseñó algo a quien nos enseña, lo cual sigue una regla de tres, o bien

    escuchar al profe
    escuchar a quien enseñó al profe
    darse a entender entre lo que comenta el profe y lo que se tiene que aprender
    para tener el "propio entendimiento" o bien un tercer comentario para aprender..

    o bueno creo que a veces en la telepatía pasa esto >__<'' o-o''

    ResponderEliminar
  8. la telepátia no existe...todo era cuestión de sonidos y no infrasonidos que otra persona puede percibir...

    ResponderEliminar
  9. Alguien tiene el archivo? lo descargo pero no ese encuentra como el video

    ResponderEliminar