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