Advertisement
cardel

Ejemplo perceptrón

Sep 6th, 2017
411
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 1.58 KB | None | 0 0
  1. #Borrar espacio para evitar problemas
  2. clear
  3.  
  4. #Función signo
  5. function [result] = signo(x)
  6.     if(x>0)
  7.         result = 1;
  8.     else
  9.         if(x<0)
  10.             result = -1;
  11.         else
  12.             result = 0;
  13.         endif
  14.     endif
  15. end
  16.  
  17. #Neurona
  18. function [z] = redNeuronal(Entrada, Pesos, Theta)
  19.     EntradaNeta = Pesos*Entrada';
  20.   z = signo(EntradaNeta+Theta*(-1));
  21. end
  22.  
  23. #Perceptron
  24.  
  25. #contador de patrones
  26. p = 0;
  27.  
  28. #Tasa de aprendizaje
  29. tasaAprendizaje = 0.5;
  30.  
  31. #patron deseado
  32. entradas = [-1,-1,-1;-1,1,-1;1,-1,-1;1,1,1];
  33.  
  34. #Generar pesos aleatorios entre -1 y 1
  35. pesos = 2*rand(1,2) - 1;
  36. theta = 2*rand(1,1) - 1;
  37. #pesos = [0.4,-0.2];
  38. #theta = 0.6
  39. iteracion = 0;
  40.  
  41. #Se aplica un maximo de iteraciones
  42. for k=1:200
  43.     #iteramos
  44.     for i = 1:rows(entradas)
  45.         entradaActual = entradas(i,1:2);
  46.         salidaDeseada = entradas(i,3);
  47.         salidaObtenida = redNeuronal(entradaActual,pesos,theta);
  48.     diferencia = salidaDeseada - salidaObtenida;
  49.    
  50.     if(diferencia==0)
  51.       p++;
  52.     else
  53.       #Actualizamos pesos
  54.       for j = 1:columns(pesos)
  55.           pesos(j) = pesos(j) + tasaAprendizaje*diferencia*entradaActual(j);
  56.       endfor
  57.       theta = theta + tasaAprendizaje*diferencia*(-1);    
  58.      
  59.       p = 0;
  60.       break;
  61.     endif
  62.    
  63.     endfor
  64.   iteracion++;
  65.   if (p == 4) break; endif
  66.  endfor
  67.  
  68. #Pruebas
  69.   iteracion
  70.   pesos
  71.   theta
  72.     for i = 1:rows(entradas)
  73.         entradaActual = entradas(i,1:2);
  74.         salidaDeseada = entradas(i,3);
  75.         salidaObtenida = redNeuronal(entradaActual,pesos,theta);
  76.    
  77.     disp("******************");
  78.     entradaActual
  79.     salidaDeseada
  80.     salidaObtenida
  81.    
  82.   endfor
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement