Bueno este es programa puede ser usado para que aprenda las compuertas logicas or y and y otras cuantas cosillas que le indiquemos que sean linealmente separables dado que es una sola neurona.

se lleva a cabo de la siguiente manera:

1.-primero te pide la cantidad de entradas y el factor de aprendizaje que podria ser por ejemplo : 0.5

2.- despues se generan los pesos aleatoriamente.

3.- despues se pide que ingrese cada una de las entradas las cuales deben ser 1 o -1(0) y la salida deseada igual 1 o -1(0).

4.- despues se hace una sumatoria de la multiplicacion de cada entrada por cada peso, si el resultado de la sumatoria es mayor o igual a cero la salida correspodiente sera : 1 en caso de que sea menor a cero la salida sera: -1(0) .

5.- por ultimo se verifica que la salida obtenida sea igual a la salida deseada en caso contrario se vuelven a calcular los pesos y se vuleve a probar con las mismas entradas hasta que la salida obtenida sea igual a la salida deseada.

y es de esta forma como este programa puede ser capaz de aprender las compuertas logicas or y and.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import random
     
    class neurona(object):
      def __init__(self,cantidadEntradas=0,factorAprendizaje=0):
        self.factorAprendizaje=factorAprendizaje
        self.cantidadEntradas=cantidadEntradas
             
      def inicializaPesos(self):
        pesos=[]
        for x in range(self.cantidadEntradas):
          pesos.append(random.uniform(0,1))
        pesos.append(random.uniform(0,1))
        print "Pesos Iniciales:\n",pesos    
        self.obtenerEntradas(pesos)
       
      def obtenerEntradas(self,pesos):
        entradas=[]
        salida=0
       
        while True:
          opcion=raw_input("Desea continuar si o no: ")
          if opcion=="no":
            break
          print "\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
          for x in range(self.cantidadEntradas):            
            entradas.append(int(raw_input("Ingrese la entrada: ")))
          entradas.append(-1)
          salidaDeseada=int(raw_input("Ingresa la salida deseada: "))
          sumatoria = self.funcionActivacion(entradas,pesos)
          if sumatoria>=0:
            salida=1
          elif sumatoria<0:
            salida=-1
          if salidaDeseada-salida!=0:
            print "Salida Obtenida: ",salida
            print "Pesos Nuevos:\n"
            for i,x in enumerate(pesos):
              pesos[i]=pesos[i] +  (2.0 * self.factorAprendizaje) * (salidaDeseada * entradas[i])
            print pesos
            self.obtenerEntradas(pesos)
          else:
            print "Salida Obtenida: ",salida
            entradas=[]
         
      def funcionActivacion(self,entradas,pesos):
        sumatoria=0
        for i,entrada in enumerate(entradas):
          sumatoria=sumatoria+(entradas[i]*pesos[i])
        return sumatoria
       
    def main():
      factorAprendizaje=raw_input("Ingresa el factor de aprendizaje: ")
      cantidadEntradas=raw_input("Cuantas seran las entradas: ")
      neurona1=neurona(int(cantidadEntradas),float(factorAprendizaje))
      pesos=neurona1.inicializaPesos()
         
    main()

Autor: Marco Samperio

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *