Advertisement
Guest User

Untitled

a guest
Jun 26th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. import math
  2. import numpy as np
  3.  
  4.  
  5. # Fonction de trasfert tahn, et sa dérivée.
  6. def sigmoid(x):
  7. return np.tanh(x)
  8.  
  9. def dsigmoid(x):
  10. return 1.0 - x**2
  11.  
  12.  
  13. class Reseau_Neurones(object):
  14. def __init__(self, *args):
  15. # On fixe la structure du RN (ie. nb et taille des couches)
  16. # self.layers : prendra les valeurs de la propagation de X dans le RN
  17. n = len(args)
  18. self.layers = [np.ones(args[i] + (i==0)) for i in range(0, n)]
  19.  
  20. # liste des matrices Wn, à valeurs rand entre -0.2 et 0.2
  21. self.weights = list()
  22. for i in range(n-1):
  23. R = np.random.random((self.layers[i].size, self.layers[i+1].size))
  24. self.weights.append((2*R-1)*0.20)
  25.  
  26. # Qu'es-ce ?
  27. self.m = [0 for i in range(len(self.weights))]
  28.  
  29. # Fonction de propagation de l'entrèe dans le RN
  30. def propag(self, inputs):
  31. # on donne l'entrée X au RN, en gardant un "1" à la fin (seuil)
  32. self.layers[0][:-1] = inputs
  33. for i in range(1, len(self.layers)):
  34. # sigmoide du produit matriciel X.Wn
  35. self.layers[i] = sigmoid(np.dot(self.layers[i-1], self.weights[i-1]))
  36. return self.layers[-1]
  37.  
  38. def retroPropag(self, inputs, outputs, a=0.1, m=0.1):
  39. error = outputs - self.propag(inputs)
  40. de = error*dsigmoid(self.layers[-1])
  41. deltas = list()
  42. deltas.append(de)
  43.  
  44. for i in range(len(self.layers)-2, 0, -1):
  45. deh = np.dot(deltas[-1], self.weights[i].T) * dsigmoid(self.layers[i])
  46. deltas.append(deh)
  47.  
  48. deltas.reverse()
  49.  
  50. for i, j in enumerate(self.weights):
  51.  
  52. layer = np.atleast_2d(self.layers[i])
  53. delta = np.atleast_2d(deltas[i])
  54.  
  55. dw = np.dot(layer.T,delta)
  56. self.weights[i] += a*dw + m*self.m[i]
  57. self.m[i] = dw
  58.  
  59.  
  60.  
  61.  
  62. RN = Reseau_Neurones(2, 3, 1)
  63.  
  64. X = np.array(([3,5], [5,1], [10,2]), dtype = float)
  65. y = np.array(([75], [82], [93]), dtype = float)
  66.  
  67.  
  68.  
  69.  
  70. pat = (((0, 0), 0),
  71. ((0, 1), 1),
  72. ((1, 0), 1),
  73. ((1, 1), 0))
  74.  
  75.  
  76. n = RN(2, 3, 1)
  77.  
  78. for i in range(1000):
  79. for p in pat:
  80. n.backPropagate(p[0], p[1])
  81.  
  82. for p in pat:
  83. print n.update(p[0])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement