(http://3.bp.blogspot.com/-my7B48oV-IM/UDxs9_wJdpI/AAAAAAAAAeg/-54KP2FEH2o/s1600/redneuronal.jpg)
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.
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 ;)