Neurona en python

Iniciado por ANTRAX, Julio 15, 2014, 10:40:23 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 15, 2014, 10:40:23 PM Ultima modificación: Julio 16, 2014, 12:58:17 PM por blackdrake

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.

Código: python
    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


Wow, interesante. Me acuerdo que el año pasado (2014) me la pase investigando todo sobre esto. ...y ahora en underc0de? increible!
Buen Post  :D ;)
"Eso es lo bueno de internet. De que sirve internet si chateas con tus vecinos??? para eso te sacas unas sillas al fresco y hablais y jugais a las cartas". @windux