En esta página se puede obtener la libreria "simple-neural-net", para usar redes neuronales en nuestro interprete lisp.
Brevemente, porque supongo que si llegaste hasta aca, ya tenes una idea de esto. Las redes neuronales estan formadas por capas, y cada capa es un conjunto de nodos. Tenes una capa con las entradas, una capa con las salidas y una o varias capas que median entre ambas, (entradas y salidas) que son las capas ocultas. La red se entrena, definiendo que salidas obtener de acuerdo a las entradas suministradas.
Se utilizan para detectar patrones en imagenes, sonidos tambien, para ajustar y obtener mejores valores para los coeficientes de variables en funciones de evaluacion para juegos, etc.
Esta libreria usa las librerias "cl-store" y "lparallel", que pueden instalarse usando quicklisp. Explicado en este mismo blog.
En la pagina del proyecto se explica muy bien las funciones, asi que solo me voy a limitar a comentar uno de los ejemplos mostrados alli, que entrena la red para que muestre en una salida los resultados de una funcion XOR, aplicado a dos entradas:
(asdf:load-system "simple-neural-network")
;; carga la libreria
(defun normalize (input)
(map 'vector (lambda (x) (if (= x 1) 1.0d0 -1.0d0)) input))
(defun denormalize (output)
(if (plusp (aref output 0)) 1 0))
(defvar inputs (mapcar #'normalize '(#(0 0) #(0 1) #(1 0) #(1 1))))
;; define las entradas
(defvar targets (mapcar #'normalize '(#(0) #(1) #(1) #(0))))
;; define cada resultado de salida que corresponde con cada entrada
(defvar nn (snn:create-neural-network 2 1 4))
;; define una red neuronal con una capa de entrada de 2 nodos, una capa de salida de 1 nodo y una capa oculta de 4 nodos.
(dotimes (i 1000)
(snn:train nn inputs targets 0.1))
;; entrena la red
(denormalize (snn:predict nn (normalize #(0 0))))
-> 0
;; devuelve el valor de salida correspondiente, con la red ya entrenada
(denormalize (snn:predict nn (normalize #(1 0))))
-> 1
(denormalize (snn:predict nn (normalize #(0 1))))
-> 1
(denormalize (snn:predict nn (normalize #(1 1))))
-> 0
No hay comentarios:
Publicar un comentario