Advertisement
cardel

Implementacion Competitivo

Mar 12th, 2019
362
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. # encoding: utf-8
  2. #Autor: Carlos A Delgado
  3. #Ejemplo de una red competitiva
  4.  
  5. import numpy as np
  6. import math
  7.  
  8. def redNeuronal(entrada, pesos):
  9. """
  10. Entrada: [x1,x2,...xn]
  11. pesos Matriz m filas y n columnas
  12. """
  13. Theta = 0.5*np.sum(np.power(pesos,2),axis=1)
  14. h = np.dot(pesos, entrada) - Theta
  15.  
  16. r = np.argmax(h)
  17.  
  18. z = np.zeros(pesos.shape[0])
  19. z[r] = 1
  20.  
  21. return h,r,z
  22.  
  23. def entrenamientoIndividualizado(entradas, M, factorEntre, maxIT, P):
  24. """
  25. entradas: vector 2D
  26. M: entero (número de salidas)
  27. factorEntre: float
  28. maxIT: entero (número máximo de iteraciones)
  29. P: numero de patrones P <= M
  30. """
  31. pesos = 2*np.random.rand(M, entrada.shape[1])-1
  32.  
  33. factorApreInicial = factorEntre
  34. indices = np.random.permutation(entradas.shape[0])
  35. patron = 0
  36.  
  37. for i in range(0,maxIT):
  38.  
  39. posicion = indices[patron]
  40. entradaI = entrada[posicion]
  41.  
  42. h,r,z = redNeuronal(entradaI, pesos)
  43.  
  44. #r es mi neurona ganadora 0 - m-1
  45. for j in range(0, pesos.shape[1]):
  46. pesos[r][j] = pesos[r][j] + factorEntre*(entradaI[j]-pesos[r][j])
  47.  
  48. factorEntre = factorApreInicial*(1-i/maxIT)
  49.  
  50. patron+=1
  51.  
  52. if patron == P:
  53. patron = 0
  54. return pesos
  55.  
  56. entrada = np.array(
  57. [
  58. [0,0],
  59. [0,1],
  60. [1,0],
  61. [1,1]
  62. ]
  63. )
  64.  
  65. salida = np.array([0,1,1,1])
  66.  
  67. M = 2
  68. factorEntre = 0.5
  69. maxIT = 200
  70. P = 4
  71.  
  72. pesos = entrenamientoIndividualizado(entrada, M, factorEntre, maxIT, P)
  73.  
  74. errorMax = float('inf')
  75. mejoresPesos = np.array([])
  76.  
  77. for k in range(0,100):
  78. error = 0
  79. for i in range(0, entrada.shape[0]):
  80.  
  81. entradaI = entrada[i]
  82. h,r,z = redNeuronal(entradaI, pesos)
  83.  
  84. error += math.pow(r - salida[i],2)
  85.  
  86. error/=2
  87.  
  88. if error < errorMax:
  89. errorMax = error
  90. mejoresPesos = pesos
  91.  
  92. print errorMax
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement