Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.54 KB | None | 0 0
  1. import numpy as np
  2. from mpl_toolkits.mplot3d import Axes3D
  3. import matplotlib.pyplot as plt
  4. from matplotlib import cm
  5. X = [0.5,2.5]
  6. Y = [0.2,0.9]
  7. wx,by,er=[],[],[]
  8. def f(w,b,x):
  9. return 1/(1 +np.exp(-(w*x+b)))
  10.  
  11. def grad_b(w,b,x,y):
  12. fx = f(w,b,x)
  13. return (fx-y)*(1-fx**2)
  14.  
  15. def error(w,b):
  16. err = 0
  17. for x,y in zip(X,Y):
  18. fx = f(w,b,x)
  19. err += 0.5*(fx-y)**2
  20. return err
  21.  
  22. def grad_w(w,b,x,y):
  23. fx = f(w,b,x)
  24. return (fx-y)*(1-fx**2)*x
  25.  
  26. def Normalgrad():
  27. w,b,eta,epoch = -2,-2,1,100
  28. for i in range(epoch):
  29. dw,db = 0,0
  30. for x,y in zip(X,Y):
  31. dw += grad_w(w,b,x,y)
  32. db += grad_b(w,b,x,y)
  33. w = w-eta*dw
  34. b = b-eta*db
  35. wx.append(w)
  36. by.append(b)
  37. er.append(error(w,b))
  38.  
  39. def Momentumgrad():
  40. w,b,eta,epoch,gama,updateb,updatew = -2,-2,1,100,0.1,0,0
  41. for i in range(epoch):
  42. dw,db = 0,0
  43. for x,y in zip(X,Y):
  44. dw += grad_w(w,b,x,y)
  45. db += grad_b(w,b,x,y)
  46. updatew = gama*updatew+eta*dw
  47. updateb = gama*updateb+eta*db
  48. w = w-updatew
  49. b = b-updateb
  50. wx.append(w)
  51. by.append(b)
  52. er.append(error(w,b))
  53.  
  54. def Nesterovgrad():
  55. w,b,eta,epoch,gama,updateb,updatew,wlookahead,blookahead = -2,-2,1,100,0.1,0,0,0,0
  56. for i in range(epoch):
  57. dw,db = 0,0
  58. wlookahead = w-gama*updatew
  59. blookahead = b-gama*updateb
  60. for x,y in zip(X,Y):
  61. dw += grad_w(wlookahead,blookahead,x,y)
  62. db += grad_b(wlookahead,blookahead,x,y)
  63. updatew = gama*updatew+eta*dw
  64. updateb = gama*updateb+eta*db
  65. w = w-updatew
  66. b = b-updateb
  67. wx.append(w)
  68. by.append(b)
  69. er.append(error(w,b))
  70.  
  71. def Stochasticgrad():
  72. w,b,eta,epoch = -2,-2,1,100
  73. for i in range(epoch):
  74. dw,db = 0,0
  75. for x,y in zip(X,Y):
  76. dw += grad_w(w,b,x,y)
  77. db += grad_b(w,b,x,y)
  78. w = w-eta*dw
  79. b = b-eta*db
  80. wx.append(w)
  81. by.append(b)
  82. er.append(error(w,b))
  83.  
  84. def Minibatchgrad():
  85. w,b,eta,epoch = -2,-2,1,100
  86. X = [0.5,2.5,1,1.5]
  87. Y = [0.2,0.9,0.29,0.4]
  88. count=0
  89. for i in range(epoch):
  90. dw,db = 0,0
  91. for x,y in zip(X,Y):
  92. dw += grad_w(w,b,x,y)
  93. db += grad_b(w,b,x,y)
  94. count += 1
  95. if count%2 == 0:
  96. w = w-eta*dw
  97. b = b-eta*db
  98. wx.append(w)
  99. by.append(b)
  100. er.append(error(w,b))
  101.  
  102. fig = plt.figure()
  103. ax = fig.gca(projection='3d')
  104. ax.set_title('Normal Gradient Descent')
  105. Normalgrad()
  106. X1 = np.arange(-6, 6, 0.5)
  107. Y1 = np.arange(-6, 6, 0.5)
  108. X1, Y1 = np.meshgrid(X1, Y1)
  109. z1 = [-1]*len(wx)
  110. Z = np.array([error(w,b) for w,b in zip(X1,Y1)])
  111. ax.set_zlim3d(-1, 1)
  112. surf = ax.plot_surface(X1, Y1, Z, cmap=cm.coolwarm)
  113. ax.scatter(wx,by,z1)
  114. plt.plot(wx,by,er)
  115. plt.show()
  116.  
  117. wx,by,er = [],[],[]
  118. fig = plt.figure()
  119. ax = fig.gca(projection='3d')
  120. ax.set_title('Momentum Gradient Descent with Gama=0.1')
  121. Momentumgrad()
  122. X1 = np.arange(-6, 6, 0.5)
  123. Y1 = np.arange(-6, 6, 0.5)
  124. X1, Y1 = np.meshgrid(X1, Y1)
  125. z1 = [-1]*len(wx)
  126. Z = np.array([error(w,b) for w,b in zip(X1,Y1)])
  127. ax.set_zlim3d(-1, 1)
  128. surf = ax.plot_surface(X1, Y1, Z, cmap=cm.coolwarm)
  129. ax.scatter(wx,by,z1)
  130. plt.plot(wx,by,er)
  131. plt.show()
  132.  
  133. wx,by,er=[],[],[]
  134. fig = plt.figure()
  135. ax = fig.gca(projection='3d')
  136. ax.set_title('Nesterov Accelerated Gradient Descent with Gama=0.1')
  137. Nesterovgrad()
  138. Z = np.array([error(w,b) for w,b in zip(X1,Y1)])
  139. X1 = np.arange(-6, 6, 0.5)
  140. Y1 = np.arange(-6, 6, 0.5)
  141. X1, Y1 = np.meshgrid(X1, Y1)
  142. z1=[-1]*len(wx)
  143. Z = np.array([error(w,b) for w,b in zip(X1,Y1)])
  144. ax.set_zlim3d(-1, 1)
  145. surf = ax.plot_surface(X1, Y1, Z, cmap=cm.coolwarm)
  146. ax.scatter(wx,by,z1)
  147. plt.plot(wx,by,er)
  148. plt.show()
  149.  
  150. wx,by,er=[],[],[]
  151. fig = plt.figure()
  152. ax = fig.gca(projection='3d')
  153. ax.set_title('Stochastic Gradient Descent')
  154. Stochasticgrad()
  155. X1 = np.arange(-6, 6, 0.5)
  156. Y1 = np.arange(-6, 6, 0.5)
  157. X1, Y1 = np.meshgrid(X1, Y1)
  158. z1 = [-1]*len(wx)
  159. Z = np.array([error(w,b) for w,b in zip(X1,Y1)])
  160. ax.set_zlim3d(-1, 1)
  161. surf = ax.plot_surface(X1, Y1, Z, cmap=cm.coolwarm)
  162. ax.scatter(wx,by,z1)
  163. plt.plot(wx,by,er)
  164. plt.show()
  165.  
  166. wx,by,er=[],[],[]
  167. fig = plt.figure()
  168. ax = fig.gca(projection='3d')
  169. ax.set_title('Minibatch Gradient Dscent')
  170. Minibatchgrad()
  171. X1 = np.arange(-6, 6, 0.5)
  172. Y1 = np.arange(-6, 6, 0.5)
  173. X1, Y1 = np.meshgrid(X1, Y1)
  174. z1 = [-1]*len(wx)
  175. Z = np.array([error(w,b) for w,b in zip(X1,Y1)])
  176. Z = np.array([error(w,b) for w,b in zip(X1,Y1)])
  177. ax.set_zlim3d(-1, 1)
  178. surf = ax.plot_surface(X1, Y1, Z, cmap=cm.coolwarm)
  179. ax.scatter(wx,by,z1)
  180. plt.plot(wx,by,er)
  181. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement