Informe Redes Neuronales Luis Alfredo Sullca Huaracca May 2017
1
Intr Introdu oduct ctio ion n
Lo primero que se viene a la mente cuando uno escucha sobre inteligencia artificial es un robot pensante como nosotros , que tiene un cerebro que le permite tomar tomar dichas decisiones decisiones ... esto del todo no esta mal , puesto puesto a que los robots no poseen cerebros biologicos como nosotros, sin embargo tienen ciertos mecanismos con los cuales lo pueden pueden simular muy bien. Uno de estos estos mecanismo del como un programa de computadora puede simular el cerebro humano son las redes neuronales. neuronales. Tal y como podemos leer, este mecanismo mecanismo simulara simulara las tantas cientas cientas , miles , etc de neuronas neuronas que nosotros nosotros tenemos. El objetivo de este proyecto es informar el uso de diferentes tipos de redes neuronales, asi como su implementacion. Tipos de Redes Neuronales : •
Red Neuronal Perceptron
•
Red Neuronal Adeline
•
Red Neuronal Multicapa Aqui es el momento decisivo donde uno decide como construir la red neuronal y como entrenarl entrenarla. a. Tal y como lo habiamos mencionado mencionado se utilizara utilizara una red multi multicap capa, a, el cual tendra tendra solamen solamente te 2 capas. capas. La primera primera capa tendra como funcion de activacion la funcion sigmoidea y la segunda capa tendra como funcion de activacion la funcion lineal , esto se hace de tal manera que los valores de salida sean muy flexibles y tengan ciertas caracteristicas que mas adelante detallare. El algoritmo de entrenamiento usado para esta red neuronal es , el algoritmo descenso por gradiente , es mas el algoritmo que use se llama backpropagation en cual hace uso de secuencias ascendiente y descendientes para actualizar sus pesos sinapticos con el fin de reducir la funcion a optimizar.
De todas estas usaremos la red neuronal multicapa para el reconocimiento de rostros rostros humanos humanos y de anomalias anomalias cardiacas. cardiacas.
1
Contents 1 Introduction
1
2 Tipos de Neuronas
2.1 Neurona Natural . . . . . . . 2.2 Neurona Artificial . . . . . . 2.3 Definiciones previas : . . . . . 2.3.1 Entradas y Salidas . . 2.3.2 Pesos Sinapticos . . . 2.3.3 Regla de Propagacion 2.3.4 Funcion de activacion 2.3.5 Funcion de salida . . .
4
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
3 Arquitectura de un red Neuronal
4 4 5 5 6 6 6 6 7
3.1 Aprendizaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Fase de entrenamiento . . . . . . . . . . . . . . . . . . . . 3.1.2 Fase de Operacion o validacion . . . . . . . . . . . . . . . 4 Tipos de Redes
7 7 8 8
4.1 Red Perceptron . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Red Adeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Red Multicapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Librerias Necesarias . . . . . . . . . . . . . . . . . . . . . 4.3.2 Funcion necesaria para el algoritmo : . . . . . . . . . . . . 4.3.3 Definiendo las capaz . . . . . . . . . . . . . . . . . . . . . 4.3.4 Definiendo los patrones de entrada de prueba y las salidas esperadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.5 Inicio de entrenamiento . . . . . . . . . . . . . . . . . . . 4.3.6 Verificacion de entrenamiento . . . . . . . . . . . . . . . . 5 Reconocimiento de Rostros
8 9 9 9 9 10 10 11 11 11
5.1 Tratamiento de Imagenes . . . . . . . . 5.1.1 Escala de grises . . . . . . . . . . 5.1.2 Recorte de Cara . . . . . . . . . 5.1.3 Redimensionando y pixeleado . . 5.1.4 Convirtiendo de matriz a vector 5.2 Entrenamiento y validacion . . . . . . . 5.2.1 Entrenando Red Neuronal . . . . 5.2.2 Validando nuevas entradas . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
6 Reconocimiento de Anomalias Cardiacas
6.1 Tratamiento de datos . . . . . . 6.2 Leer el archivo ECG.mat . . . . 6.2.1 Impresion de ECG.mat 6.3 Entrenamiento y validacion . .
2
. . . .
. . . .
. . . .
. . . .
. . . .
11 12 12 12 13 13 13 15 15
15 15 16 17
6.3.1 6.3.2
Entrenando Red Neuronal . . . . . . . . . . . . . . . . . . Validacion de nuevas entradas . . . . . . . . . . . . . . . .
3
17 18
2 2.1
Tipos de Neuronas Neurona Natural
Una neurona es una c´elula viva y como tal posee todos los elementos comunes de las c´elulas biol´ ogicas. A su vez, las neuronas tienen caracter´ısticas propias que le permiten comunicarse entre ellas, lo que las diferencia del resto de las c´ elulas biol´ogicas. La figura 1 muestra la estructura t´ıpica de una neurona biol´ogica. Figure 1: NeuronaNatural
De la figura se observa que la neurona biol´ogica esta compuesta por un cuerpo celular o soma, del cual se desprende ´arbol de ramificaciones llamado ´arbol dendr´ıtico, compuesto por las dendritas. Del soma tambi´en parte una fibra tubular, llamada ax´on, el cual suele ramificarse cerca de su extremo. Las dendritas act´ uan como un canal de entrada de se˜nales provenientes desde el exterior hacia la neurona, mientras que el ax´on act´ ua como un canal de salida. El espacio entre dos neuronas vecinas se denomina sinapsis. En el c´ortex cerebral se observa una organizaci´on horizontal en capas, as´ı como tambi´en una organizaci´ on vertical en columnas de neuronas. La intensidad de una sinapsis no es fija, sino que puede ser modificada en base a la informaci´on proveniente del medio. De esta manera la estructura del cerebro no permanece fija sino que se va modificando por la formaci´on de nuevas conexiones, ya sean excitadoras o inhibidoras, la destrucci´ on de conexiones, la modificaci´on de la intensidad de la sinapsis, o incluso por muerte neuronal. Desde un punto de vista funcional, las neuronas conforman un procesador de informaci´on sencillo. Constan de un subsistema de entrada (dendritas), un subsistema de procesamiento (el soma) y un subsistema de salida (ax´on)
2.2
Neurona Artificial
La neurona artificial es un elemento de procesamiento simple que a partir de un vector de entradas produce una ´unica salida. En general podemos encontrar tres tipos de neuronas artificiales, donde cada una de las cuales tiene su contraparte en el sistema nervioso:
4
•
Las que reciben informaci´on directamente desde el exterior, a las cuales se las denomina neuronas de entrada.
•
Las que reciben informaci´on desde otras neuronas artificiales, a las cuales se las denomina neuronas ocultas. Es en estas neuronas, en particular en sus sinapsis, donde se realiza la representaci´on de la informaci´on almacenada.
•
Las que reciben la informaci´on procesada y las devuelven al exterior. A estas neuronas se las denomina neuronas de salida. Figure 2: (NeuronaArtificial)
•
Patron de entrada , xi (t) Estas provienen del exterior o de otras neu-
ronas. •
Peso Sinaptico , wij Representan el grado de comunicacion entre : la entrada p j y la neurona i.
•
Regla de propagacion, σi (wij , xj ) Integra la informaci´on proveniente
de las distintas neuronas artificiales y proporciona el valor del potencial postsin´aptico de la neurona i. •
Funcion de activacion, f i (ni ) , Donde ni es la entrada neta segun los
patrones de entrada y los pesos sinapticos. Provee el estado de activacion de la neurona i •
Funcion de salida , F i (ai ). Donde a i es el valor de estado de la neurona i. ai = f i (ni )
2.3
Definiciones previas :
2.3.1
Entradas y Salidas
Clasificacion de entradas y salidas: •
Binarias Solo admiten dos valores posibles, entre los mas comunes son 0
y 1 o -1 y 1. •
Continuas Estas admiten valores dentro de un determinado rango, que
en general puede definirse como [0,1] o [-1,1] 5
2.3.2
Pesos Sinapticos
El peso sin´aptico w ij define la fuerza de una conexi´on sin´ aptica entre la entrada j y la neurona i. Los pesos sin´apticos pueden tomar valores positivos, negativos o cero. En caso de una entrada positiva, un peso positivo act´ua como excitador, mientras que un peso negativo act´ua como inhibidor. En caso de que el peso sea cero, no existe comunicaci´on entre el par de neuronas. Mediante el ajuste de los pesos sin´ apticos la red es capaz de adaptarse a cualquier entorno y realizar una determinada tarea. 2.3.3
Regla de Propagacion
La regla de propagaci´on determina el potencial resultante de la interacci´on del patron de entrada con la neurona i . ni
= σi (wij , xj )
ni
=
wij xj
j =1
2.3.4
Funcion de activacion
La funci´on de activaci´on determina el estado de activaci´on actual de la neurona en base al potencial resultante n i . ai = f i (ni ) ; ni =
wij xj
(1)
j =1
Existe muy distintas funciones de activacion, uno es libre a la hora de elegir que tipo de funcion de activacion usar de las cuales las podemos ver en la figura 3. 2.3.5
Funcion de salida
La funci´on de salida proporciona el valor de salida de la neurona, en base al estado de activaci´on de la neurona. En general se utiliza la funci´ on identidad, es decir: yi = F i (ai ) = a i
6
(2)
Figure 3: (Funciones de activacion)
3
Arquitectura de un red Neuronal
La organizaci´on y disposici´ on de las neuronas dentro de una red neuronal se denomina topolog´ıa, y viene dada por : •
Numero de capas, donde las capas son una composicion de neuronas en forma paralela.
•
Cantidad de Neuronas por capa, las cuales se encuentras uno detras de otra capa similar a un conexion en serie
•
Grado de conectividad
•
Tipo de conexion entre neuronas
3.1
Aprendizaje
Durante la operatoria de una red neuronal podemos distinguir claramente dos fases o modos de operaci´on: la fase de aprendizaje o entrenamiento, y la fase de operaci´on o ejecuci´on. Durante la primera fase, la fase de aprendizaje, la red es entrenada para realizar un determinado tipo de procesamiento. Una vez alcanzado un nivel de entrenamiento adecuado, se pasa a la fase de operaci´on, donde la red es utilizada para llevar a cabo la tarea para la cual fue entrenada. 3.1.1
Fase de entrenamiento
Partiendo de un conjunto de pesos sin´apticos aleatorio, el proceso de aprendizaje busca un conjunto de pesos que permitan a la red desarrollar correctamente una
7
determinada tarea. Durante el proceso de aprendizaje se va refinando iterativamente la soluci´on hasta alcanzar un nivel de operaci´on suficientemente bueno. Existen 3 tipos de aprendizaje: Se presenta a la red un conjunto de patrones de entrada junto con la salida esperada. Los pesos se van modificando de manera proporcional al error que se produce entre la salida real de la red y la salida esperada.
•
Aprendizaje Supervizado :
•
Aprendizaje No Supervizado :
•
Aprendizaje Por Refuerzo :
Se presenta ala red un conjunto de patrones de entrada. No hay informaci´on disponible sobre la salida esperada. El proceso de entrenamiento en este caso deber´a ajustar sus pesos en base a la correlaci´on existente entre los datos de entrada.
3.1.2
Este tipo de aprendizaje se ubica entre medio de los dos anteriores. Se le presenta a la red un conjunto de patrones de entrada y se le indica a la red si la salida obtenida es o no correcta. Sin embargo, no se le proporciona el valor de la salida esperada. Este tipo de aprendizaje es muy ´util en aquellos casos en que se desconoce cual es la salida exacta que debe proporcionar la red. Fase de Operacion o validacion
Una vez finalizada la fase de aprendizaje, la red puede ser utilizada para realizar la tarea para la que fue entrenada. Una de las principales ventajas que posee este modelo es que la red aprende la relaci´on existente entre los datos, adquiriendo la capacidad de generalizar conceptos. De esta manera, una red neuronal puede tratar con informaci´on que no le fue presentada durante de la fase de entrenamiento.
4 4.1
Tipos de Redes Red Perceptron
El perceptron es una red neuronal monocapa el cual tiene como funcion de activacion a Escalon, y es de mucha importancia debido a que fue el primer modelo que tuvo un mecanismo de entrenamiento que permitia determinar automaticamente los pesos sinapticos. El perceptron es usado para casos donde exista separabilidad lineal y segun el tama˜ no de las neuronas de salida (S ) las puede clasificar en 2 S clases, ademas solo asegura encontrar una respuesta de separabilidad lineal , mas no la mas eficiente u optima. El algoritmo que usa para su entrenamiento se llama, algoritmo por correccion de errores. Este algoritmo ajusta los pesos de manera proporcional a la diferencia entre la salida actual y la salida objetivo. ai = f (
n
wij xj ); f = escalon
j
8
(3)
En forma matricial seria : a = f (W x + b)
4.2
(4)
Red Adeline
Es muy similar al perceptron , con el hecho que tambien es una red neuronal monocapa , sin embargo su funcion de activacion es lineal, esto es debido a que las se˜ nales de entrada pueden ser continuas.
ai
⇒
a i
n
= f ( =
n
wij xj ); f = lineal
j
wij xj
j
En forma matricial seria : a = W x + b
4.3
(5)
Red Multicapa
Es muy similar a los ejemplos anteriores , con la simple diferencia que esta red neuronal usa mas de 2 capaz (capa de entrada y salida) , sino tambien usa capaz intermedias las cuales no podremos ver por la cual se llamaran capaz ocultas. a3 = f 3 (W 3 f 2 (W 2 f 1 (W 1 p + b1 ) + b2 ) + b3 )
(6)
Podria hablar mucho mas de la demostracion del algoritmo de retropropagacion para el entrenamiento de la red multicapa, mejor lo muestro defrente su implementacion: 4.3.1
Librerias Necesarias
1 import numpy as np 2 import m a t p l o t li b . p y pl o t a s p l t
4.3.2
Funcion necesaria para el algoritmo :
1 de f d i a g ( x , f = N on e ) : 2 n = le n ( x ) 3 temp = np . z er os ( [ n , n ] ) 4 f o r i in range ( n ) : i f f !=None : 5 6 temp [ i , i ] = f ( x [ i ] ) 7 else : 8 temp [ i , i ] = x [ i ] return temp 9
9
4.3.3
Definiendo las capaz
1 #Tamano d e p a t r o n e n t r a d a : 2 r = 1 3 #Tamano d e p a t r o n s a l i d a : 4 s0 = 1 5 6 s = {} 7 W = {} 8 b = {} 9 f = {} 1 0 d f = {} 11 12 a = {} 13 S = {} 14 n = {} 15 16 #La can tid ad de CAPAS 17 M = 2 18 1 9 s [ −1 ] = r 20 #D e f i n i e n d o p r i me r a c a pa 21 s [ 0 ] = 2 22 W[ 0 ] = n p . r an do m . r an do m ( [ s [ 0 ] , s [ − 1 ] ] ) ∗ ( 2 ) −1 #Ya e s t a t r a n s p u e s t o 23 b [ 0 ] = n p . r a nd om . r an do m ( [ s [ 0 ] , 1 ] ) ∗ ( 2 ) −1 24 25 f [ 0 ] = lambda n : 1 / (1 + np . e x p(−n ) ) 26 d f [ 0 ] = lambda n : (1 − n ) ∗ n 27 28 #D e f i n ie n d o l a s eg u nd a c ap a 29 s [ 1 ] = 1 30 W[ 1 ] = np. random. random ( [ s [ 1 ] , s [ 0 ] ] ) ∗ 2 −1 31 b [ 1 ] = n p . r a nd om . r an do m ( [ s [ 1 ] , 1 ] ) ∗2−1 32 f [ 1 ] = lambda n : n 33 d f [ 1 ] = lambda n : 1
4.3.4
Definiendo los patrones de entrada de prueba y las salidas esperadas
1 2 #P ro bl em a : C re ar u na r e d n e u ro n a l c a pa z d e a p ro x im a r l a s g t f u n c i o n 3 #g ( p ) = 1 + s i n ( n p . p i / 4 ∗ p ) ; −2 <=p<=2 4 de f g ( p ) : 5 return 1+ n p . s i n ( n p . p i ∗ p / 4 ) 6 7 #G en e ra r P c on 2 1 p u n t o s 8 Q = 21 9 P = np . z e r o s ( [ r , Q ] ) 10 t em p = n p . l i n s p a c e ( − 2 , 2 , 2 1 ) 11 f or q in range (Q) : 12 P [ : , q ] = temp [ q ]
10
4.3.5
Inicio de entrenamiento
1 #I n i c i o d e e n t re n a mi e n to d e r e d N eu ro n al 2 E po c as = 1 0 0 0 3 s ig ma = 0 . 0 0 1 4 converge = False 5 J = 0 6 epoca = 0 7 while e p o c a < Epocas and c o n v e r g e ! = T ru e : 8 s = 0 9 f o r q in range (Q) : 10 temp = np . z e ro s ( [ r , 1 ] ) 11 temp [ : , 0 ] = P [ : , q ] 12 #C a l cu l a nd o a , p r o p ag a c io n 13 a [ −1] = temp 14 f or m in range (M) : 15 n [m] = W[m ] . d ot (a [ m− 1])+b [m] 16 a [m] = f [m] ( n [m] ) 17 e r r = g ( temp ) − a [M− 1] 18 s += e r r . T . do t ( e r r ) 19 #C a l cu l a nd o S , r e t r o p r o p a g a c i o n 20 S [M− 1] = −2∗ d i a g ( n [ M− 1] , df [M− 1 ] ) . d o t ( e r r ) f or m in range (M− 2 , − 1 , − 1) : 21 22 S [m] = d ia g ( a [m] , d f [m] ) . d ot (W[m+ 1] .T) . d ot ( S [ m+ 1] ) 23 f or m in range (M) : 24 W[m] = W[m] − sigma ∗ S [ m ] . d o t ( a [ m− 1 ] . T ) 25 b [m] = b [m] − sigma ∗ S [ m ] 26 J = s /2 27 print ( J ) 28 i f J < 0 . 0 1 : 29 c o n v e g e = True 30 break 31 ep o ca += 1 32 33 print ’ D es pu es de c o nv e rg e r . . . n os t o ca v e r i f i c a r ’
4.3.6
Verificacion de entrenamiento
1 print g ( P ) 2 a = np. array ( [ [ 0 ] ] ) 3 f or m in range (M) : 4 n = W[m ] . d ot ( a )+b [m] 5 a = f [m] ( n ) 6 print ( a )
5 5.1
Reconocimiento de Rostros Tratamiento de Imagenes
El primer paso para el reconocimiento de imagenes estandarizar todas las imagenes a tratar con el fin de que todas estas tengan la misma cantidad de pixeles y solo muestre los datos mas relevantes. 11
1 2 3 4 5 6 7
p r e p a r a r Fo t o s ( ) t r a n s f o r m a rF o t o s ( ) t o V e ct o r ( ) p i c k l e . d ump ( m a t r i z I m a g e n e s , open ( ’ matrizIm agene s ’ , ’wb’ ) ) p i c k l e . dump ( d a t a , open ( ’ matrizVect orImg ’ , ’wb’ ) ) p i c k l e . dump ( f o t o s , open ( ’ f o t o s ’ , ’ wb ’ ) )
5.1.1
Escala de grises
Para comenzar primero todas las imagenes que tenemos las debemos pasar a gris, con el fin de obtener solo la informacion mas importante. En mi caso con python se haria de la siguiente manera : 1 2 de f p r e p a r a r F o t o s ( ) : 3 c a n t F o t o s = le n ( f o t o s ) 4 f o r i in range ( cant Foto s ) : f or j in range ( 4 ) : 5 6 i n d i c e = 4 ∗ i + j 7 nombre = ’ . / i m a g e ne s / ’ + f ot os [ i ] + s t r ( j + 1 ) + ’ . j p g ’ 8 i m a g en e s . append ( Image . open (nombre) . con ver t ( ’L’ ) ) 9 m at ri zI ma ge ne s . append ( np . a s ar r ay ( i m ag en es [ i n d i c e ] , d ty pe =f l o a t ) )
5.1.2
Recorte de Cara
Para el recorte se puede hacer de distintas maneras , pero en mi caso opte usar un editor de fotos, gimp con el cual obtuve facilmente las fotos de las personas con el fin que solo se enfoque la cara.
5.1.3
Redimensionando y pixeleado
Todas las fotos fueron redimensionadas a un unico tama˜no de 40 pixeles fila y 30 pixeles columna. Pero para hacer esto posible se hizo necesario recurrir al pixeleado , es decir tomar un cierto sector de la matriz original , sacar un promedio entre ellas , comprobar si dicho valor promedio superaba el umbral o no , si lo superaba entonces su valor seria 1 en caso contrario seria 0 y llenar en la matriz imagen nueva con dicho valor. En python esto se haria de la siguiente forma: 1 de f tra nsf or mar (m atriz , newH,newW) : 2 ( h e ig h t , w id th ) = m a t r iz . s ha pe 3 print h e ig h t , w id th
12
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
e s c a l a X = f l o a t ( widt h ) /newW e s c a l a Y = f l o a t ( hei gh t )/newH print e sc a la X , e s ca l a Y t em p = np . z e r o s ( [ newH , newW ] , d t y pe = f l o a t ) f o r i i n r ange (newH) : f or j in range (newW) :
i i = e s c a l a Y ∗ i j j = e s c a l a X ∗ j mean = np . mean ( m at ri z [ i i : i i +e sc al aY , j j : j j +e sc al a X ] ) i f mean < 132: mean = 0 else : mean = 1 temp [ i , j ] = mean return temp
1 de f t r a n s f o r m a r F o t o s ( ) : 2 c a n t F o t o s = le n ( f o t o s ) f o r i in range ( cant Foto s ) : 3 4 f or j in range ( 4 ) : 5 i n d i c e = 4 ∗ i + j 6 m at ri zI ma ge ne s [ i n di c e ] = t ra ns fo rm ar ( m at ri zIm ag en es [ indic e ] ,40 ,30)
5.1.4
Convirtiendo de matriz a vector
Esta fase es importantisima para el manejo de los patrones de entrada en la red neuronal. 1 d at a = [ ] 2 de f t o V e c t o r ( ) : 3 c a n t F o t o s = le n ( f o t o s ) 4 f o r i in range ( cant Foto s ) : 5 f or j in range ( 4 ) : 6 i n d i c e = 4 ∗ i + j 7 #t r a n sf o r m ar t em p e n un v e c t o r d e 1 20 0 8 m a t r i z = m a t r i z I m a g e n e s [ i n d i ce ] 9 vector = [ ] 10 f or i i in range ( 4 0 ) : 11 i f i i %2==0: 12 f o r j j in range ( 3 0 ) : 13 v e c t o r . append ( m a t r i z [ i i , j j ] ) 14 e l s e : 15 f o r j j in range ( 2 9 , − 1 , − 1) : 16 v e c t o r . append ( m a t r i z [ i i , j j ] ) 17 d a ta . append ( v e c t o r )
5.2 5.2.1
Entrenamiento y validacion Entrenando Red Neuronal
Con el uso del codigo anteriormente mostrado, podemos cambiar simplemente la seccion de datos de entrada y las salidas esperadas teniendo asi ya nuestro 13
programa que entrena una red para el reconocimiento de rostros. Este a diferencia del otro, guardara los pesos sinapticos obtenidos con la finalidad a que estos pesos sinapticos dejen de ser recalculados nuevamente. Con esto, los unicos cambios serian lo siguiente: Redefiniendo las capas 1 #Tamano d e p a t r o n e n t r a d a : 2 r = 1200 3 #Tamano d e p a t r o n s a l i d a : 4 s 0 = le n ( f o t o s ) 5 #S es go , e s l a m it ad d e l r an go d e una d i s t r i b u c i o n u ni fo rm e 6 sesgo = 0.001 7 #La can tid ad de CAPAS 8 M= 2 9 1 0 s [ − 1 ] = r #e l t am an o d e l p a t ro n d e e n t ra d a 11 #D e f i n i e n d o p r i me r a c a pa 12 s [ 0 ] = 2 ∗ le n ( f o t o s ) #l a c a n ti d a d d e n eu ro na s d e l a s s eg un da c ap a 13 W[ 0 ] = n p . r an do m . r an do m ( [ s [ 0 ] , s [ − 1 ] ] ) ∗ 2 ∗ s e s g o − s e s g o #Ya es ta transpuesto 14 b [ 0 ] = n p . r a nd om . r an do m ( [ s [ 0 ] , 1 ] ) ∗ 2 ∗ s e s g o − s e s g o 15 f [ 0 ] = lambda n : 1 / (1 + np . e x p(−n ) ) 16 d f [ 0 ] = lambda n : (1 − n ) ∗ n 17 18 #D e f i n ie n d o l a s eg u nd a c ap a 19 s [ 1 ] = s 0 #La c a n t i d a d d e n e ur o na s e n l a s e gu n da c ap a , p e ro como s o l o t en em os d os c ap az e n t on c es ta mbn d e f i n e l a s a l i d a 20 W[ 1 ] = np. random. random ( [ s [ 1 ] , s [ 0 ] ] ) ∗ 2 ∗ s e s g o − s e s g o 21 b [ 1 ] = n p . r a nd om . r an do m ( [ s [ 1 ] , 1 ] ) ∗ 2 ∗ s e s g o − s e s g o 22 f [ 1 ] = lambda n : n 23 d f [ 1 ] = lambda n : 1
Redefiniendo los datos de entrada 1 Q = le n ( f o t o s ) ∗ 4 2 print Q 3 p r in t l e n ( m a t r i z V e c t o r I m g ) 4 P = np . z e r o s ( [ r , Q ] ) 5 #C ar ga r l a s c a r a s e n P 6 t em p = m a t r i z V ec t o r I m g 7 # 8 f or q in range (Q) : 9 P [ : , q ] = temp [ q ] 10 #D e fi n i en d o l o s v a l o r e s d e s a l i d a e s pe r ad a 11 t = n p . a r r a y ( [ 12 #0 1 2 3 4 5 6 7 8 13 [1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0] , 14 [1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0] , 15 [1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0] , 16 [1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0] , 17 [0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0] , 18 [0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0] , 19 [0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0] , 20 [0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0] , 21 [0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0] , 22 [0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0] ,
14
23 [0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0] , 24 [0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0] , 25 [0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0] , 26 [0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0] , 27 [0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0] , 28 [0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0] , 29 [0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0] , 30 [0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0] , 31 [0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0] , 32 [0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0] , 33 [0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0] , 34 [0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0] , 35 [0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0] , 36 [0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0] , 37 [0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0] , 38 [0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0] , 39 [0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0] , 40 [0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0] , 41 [0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0] , 42 [0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0] , 43 [0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0] , 44 [0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0] , 45 [0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1] , 46 [0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1] , 47 [0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1] , 48 [0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1] , 49 ] ) 50 # t e s l a t ra ns pu es ta de t 51 t = t . T
5.2.2
Validando nuevas entradas
Aqui es donde se cargara los pesos sinapticos previamente guardados en el programa anterior de entrenamiento los cuales se volveran a usar para validar nuevas entradas muy diferentes a las cuales se presentaron. Tenemos dos opciones para esta validacion: •
Presentar una nueva foto de alguno de los personas con cuales entrenamos a la red pero con gesto diferentes.
•
Presentar una foto modificada de alguno de las personas con las cuales entrenamos a la red.
6
Reconocimiento de Anomalias Cardiacas
6.1
Tratamiento de datos
6.2
Leer el archivo ECG.mat
Para la lectura de este archivo .mat proveniente del lenguaje de MathLab , use el siguiente codigo :
15
1 import s c i p y . i o 2 import numpy as np 3 import m a t p l o t li b . p y pl o t a s p l t 4 import p i c k l e 5 m at = s c i p y . i o . l o a d m a t ( ’ . / E C G Vi l la . m at ’ ) 6 c a n t = le n (mat)
Luego de obtener dicha variable pase a imprimir su valor, el cual me dio un vector de matrices de tama˜no 4048x1, pero no todos eran matrices, habian datos que no eran por lo cual pase a filtrarlos segun sus nombre usando el siguiente vector de cadenas: 1 i n di c es = [ # 2 3 4 5 6 7 ]
Normal ’ yy1 ’ , ’ yy2 ’ , ’ yy3 ’ , ’ yy4 ’ , ’ yy5 ’ ,
An oma li a1 ’ yy1r1 ’ , ’ yy2r1 ’ , ’ yy3r1 ’ , ’ yy4r1 ’ , ’ yy5r1 ’ ,
A no ma li a2 ’ yy1r2 ’ , ’ yy2r2 ’ , ’ yy3r2 ’ , ’ yy4r2 ’ , ’ yy5r2 ’ ,
A no ma li a3 ’ yy 1 r 3 ’ , ’ yy 2 r 3 ’ , ’ yy 3 r 3 ’ , ’ yy 4 r 3 ’ , ’ yy 5 r 3 ’
Luego de ello pase a imprimir las funciones respectivas de los datos segun el tiempo y obtuve que en cada grafica habian 7 periodos. Por lo cual es facil deducir cuantos datos tomar por periodo. 4048/7 = 686 Por lo cual nuestro objetivo era tomar una cierta cantidad de datos igual a 600 , pero como 600 y 686 son relativamente cercanos , entonces opte por tomar los 686 datos. El codigo final de Lectura de el archivo ECG.mat es : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#C a n t id a d d e e n t r a d a s r = 6 8 6 # p o r p e ri o d o o f f s e t = 415 x = np. array ([4 808 ,1]) x = m at [ ’ t i m e ’ ] [ : , 0 ] x = x [ o f f s e t : o f f s e t + 68 6] t i p os D eO n da s = 5 min = 0 d at a = [ ] f or i in range ( t i p o s D eO n d a s ) : f o r j in range ( 4 ) : i n d e x = 4 ∗ i + j y = mat [ i n di c es [ i nd e x ] ] [ : , 0 ] y = y [ o f f s e t : o f f s e t +686] da t a . append (y ) p i c k l e . dump ( d a t a , open ( ’ anomal ias ’ , ’wb’ ) )
6.2.1
Impresion de ECG.mat
Si usted busca ver los datos obtenidos por el archivo puede usar el siguiente codigo, que imprimira las ondas segun su tipo y anomalia que presentan. 1 f or i in range ( t i p o s D eO n d a s ) : 2 p l t . f ig ur e ( ) 3 f o r j in range ( 4 ) :
16
i n d e x = 4 ∗ i + j y = mat [ i n di c es [ i nd e x ] ] [ : , 0 ] y = y [ o f f s e t : o f f s e t +686] da t a . append ( y ) p lt . s u b p l o t ( 2 , 2 , j +1) plt . plot (x , y) p lt . t i t l e ( i n d ic es [ i n d e x ] ) p lt . show ( )
4 5 6 7 8 9 10 11
6.3 6.3.1
Entrenamiento y validacion Entrenando Red Neuronal
Asi como en el ejemplo problema anterior del reconocimiento de rostros, es solo cuestion de cambiar los patrones de entrada y las salidas esperadas(objetivo). 1 import numpy as np 2 import m a t p l o t li b . p y pl o t a s p l t 3 import p i c k l e 4 5 a n o ma l i a s = p i c k l e . l o a d ( open ( ’ anom ali as ’ , ’ rb ’ ) ) 6 t i po s = 5 1 r = le n ( a n o m a l i a s [ 0 ] ) 2 print r 3 #Tamano d e p a t r o n s a l i d a : 4 s0 = 4 1 Q = le n ( a n o m a l i a s ) 2 print Q 3 p r in t l e n ( a n o m a l i a s ) 4 P = np . z e r o s ( [ r , Q ] ) 5 #C ar ga r l a s c a r a s e n P 6 temp = anomalias 7 # p r i n t t em p 8 # 9 f or q in range (Q) : 10 P [ : , q ] = temp [ q ] 11 #D e fi n i en d o l o s v a l o r e s d e s a l i d a e s pe r ad a 12 t = n p . a r r a y ( [ 13 #0 1 2 3 4 5 6 7 8 14 [ 1 , 0 , 0 , 0] , 15 [ 1 , 1 , 0 , 0] , 16 [ 1 , 0 , 1 , 0] , 17 [ 1 , 0 , 0 , 1] , 18 [ 2 , 0 , 0 , 0] , 19 [ 2 , 1 , 0 , 0] , 20 [ 2 , 0 , 1 , 0] , 21 [ 2 , 0 , 0 , 1] , 22 [ 3 , 0 , 0 , 0] , 23 [ 3 , 1 , 0 , 0] , 24 [ 3 , 0 , 1 , 0] , 25 [ 3 , 0 , 0 , 1] , 26 [ 4 , 0 , 0 , 0] ,
17
27 28 29 30 31 32 33 34 ] ) 35 t =
[ 4 , 1 , 0 , 0] [ 4 , 0 , 1 , 0] [ 4 , 0 , 0 , 1] [ 5 , 0 , 0 , 0] [ 5 , 1 , 0 , 0] [ 5 , 0 , 1 , 0] [5 ,0 ,0 ,1]
, , , , , ,
t .T
6.3.2
Validacion de nuevas entradas
1 import numpy as np 2 import m a t p l o t li b . p y pl o t a s p l t 3 import Image 4 import p i c k l e 5 6 tip os = [ ’ I ’ , ’ II ’ , ’ II I ’ , ’IV ’ ] 7 8 a n o ma l i a s = p i c k l e . l o a d ( open ( ’ . . / e n t r e n a m i e n t o / a n o m a l i a s ’ , ’ r b ’ ) ) 9 W = p i c k l e . l o a d ( open ( ’ .. / entre nami ento /W’ , ’ rb ’ ) ) 10 b = p i c k l e . l o a d ( open ( ’ . . / e n t r e n a m i e n t o / b ’ , ’ r b ’ ) ) 11 12 M = le n (W)
Luego de calcular los patrones de salida, debemos indicar como se imprimiran y saber que tipo y anomalia presenta . 1
o ut = ’ P u l s o C a r d i a c o de t i p o round ( a [ 0 ] − 1 ) ) ] + ’ ’
’ + t i p o s [ i nt ( n p .
2 3 E s ta d o s = { 0 : ’ N o rm a l ’ , 1 : ’ A n o m al i a 1 ’ , 2 : ’ A n o m al i a 2 ’ , 3 : ’ A n o ma l i a 3 ’} 4 5 max = 1 6 f or i in range ( 1 , 4 ) : 7 i f a [ i ] > a [ max ] : 8 max = i 9 t e m p = n p . round ( a [ max ] ) 10 i f t em p == 0 : 11 max = 0 12 o u t += E s t a d o s [ max ] 13 14 print o ut
18