waydub12

backpropagation-and.py

Apr 13th, 2021 (edited)
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.65 KB | None | 0 0
  1. import math
  2.  
  3. # variabel input
  4. x = [
  5.     [0, 0],
  6.     [0, 1],
  7.     [1, 0],
  8.     [1, 1]
  9. ]
  10. t = [0, 0, 0, 1] # target
  11.  
  12. nr_input = 2 # neuron input
  13. nr_hidden = 3 # neuron hidden
  14. nr_output = 1 # neuron output
  15.  
  16. ## Initialed Variable
  17. lrate = 0.2 # Learning rate 0 < a <= 1
  18. # epoh
  19. maxEpoh = 1000
  20. epoh = 0
  21. #error
  22. targetError = 10**-10
  23. E = 0
  24. ##
  25.  
  26. v = [[0.2, 0.3, -0.1], [0.3, 0.1, -0.1]]
  27. b1 = [-0.3, 0.3, 0.3]
  28. w = [[0.5], [-0.3], [-0.4]]
  29. b2 = [-0.1]
  30.  
  31. # Perkalian -> z_in
  32. def zMultiply(data):
  33.     z_in = [0 for i in range(nr_hidden)]
  34.     for i in range(nr_hidden):
  35.         sum = 0
  36.         for j in range(nr_input):
  37.             sum = sum + v[j][i]*x[data][j]
  38.         z_in[i] = round(b1[i] + sum, 4)
  39.     return z_in
  40.  
  41. # Fungsi Aktivasi Sigmoid
  42. def zActivation(z_in):
  43.     z = [0 for i in range(len(z_in))]
  44.     for i in range(len(z_in)):
  45.         z[i] = round((math.e**z_in[i]/(math.e**z_in[i]+1)), 4)
  46.     return z
  47.  
  48. # Perkalian -> y_in
  49. def yMultiply(z):
  50.     y_in = [0 for i in range(nr_output)]
  51.     for i in range(nr_output):
  52.         sum = 0
  53.         for j in range(nr_hidden):
  54.             sum = sum + w[j][i]*z[j]
  55.         y_in[i] = round(b2[i] + sum, 4)
  56.     return y_in
  57.  
  58. # Fungsi Aktivasi Linear
  59. def yActivation(y_in):
  60.     return y_in
  61.  
  62. # Cek error
  63. def error_check(data, y):
  64.     error = t[data]-y[0]
  65.     return error
  66.  
  67. # Kuadrat Error
  68. def error_quad(error):
  69.     global E
  70.     E = round(E + error*error, 2)
  71.     return E
  72.  
  73. # Turunan Fungsi Aktivasi Linear
  74. def derivYActivation(y_in):
  75.     return 1
  76.  
  77. # Turunan Fungsi Aktivasi Sigmoid
  78. def derivZactivation(z_in):
  79.     z = [0 for i in range(len(z_in))]
  80.     for i in range(len(z_in)):
  81.         z[i] = (math.e**z_in[i]/(math.e**z_in[i]+1))*(1-(math.e**z_in[i]/(math.e**z_in[i]+1)))
  82.     return z
  83.  
  84. # Perbaikan Bobot
  85. def fix_weight(data, error, y_in, z_in, z):
  86.     delta = error*derivYActivation(y_in[0])
  87.  
  88.     delta_in = [0 for i in range(len(b1))]
  89.     delta_z = [0 for i in range(len(delta_in))]
  90.     deriv_z = derivZactivation(z_in)
  91.     for i in range(len(b1)):
  92.         delta_in[i] =  delta*w[i][0]
  93.         delta_z[i] = delta_in[i]*deriv_z[i]
  94.         b1[i] = round(b1[i] + lrate*delta_z[i], 4)
  95.         for j in range(len(v)):
  96.             v[j][i] = round(v[j][i] + lrate*delta_z[i]*x[data][j], 4)
  97.  
  98.     for i in range(len(b2)):
  99.         b2[i] = round(b2[i] + lrate*delta, 4)
  100.  
  101.     for i in range(nr_hidden):
  102.         for j in range(nr_output):
  103.             w[i][j] = round(w[i][j] + lrate*delta*z[i], 4)
  104.  
  105. # Menghitung Nilai MSE
  106. def get_mse(sum_error):
  107.     sum = 0
  108.     for i in range(len(sum_error)):
  109.         sum = sum + sum_error[i]**2
  110.     mean = round(sum/len(sum_error), 4)
  111.     return mean
  112.  
  113. # Traversal
  114. def traversal(k):
  115.     print("Data ke-", k+1)
  116.     print("v = ", v)
  117.     print("b1 = ", b1)
  118.     print("w = ", w)
  119.     print("b2 = ", b2)
  120.  
  121. def backpropagation():
  122.     global epoh, E
  123.     while epoh < maxEpoh:
  124.         print("Pada epoh ke-", epoh+1)
  125.         E = 0
  126.  
  127.         sum_error = [0 for i in range(len(x))]
  128.         for k in range(len(x)):
  129.             z_in = zMultiply(k)
  130.             z = zActivation(z_in)
  131.             y_in = yMultiply(z)
  132.             y = yActivation(y_in)
  133.  
  134.             error = error_check(k, y)
  135.             error_quad(error)
  136.  
  137.             sum_error[k] = error
  138.  
  139.             fix_weight(k, error, y_in, z_in, z)
  140.             traversal(k)
  141.  
  142.         mse = get_mse(sum_error)
  143.         print("MSE = ", mse)
  144.  
  145.         epoh = epoh + 1
  146.         print()
  147.         if (mse < targetError): break    
  148.  
  149. if __name__ == '__main__':
  150.     backpropagation()
  151.     print("Bobot - Bobot Akhir yang Diperoleh:")
  152.     print("v = ", v)
  153.     print("b1 = ", b1)
  154.     print("w = ", w)
  155.     print("b2 = ", b2)
Add Comment
Please, Sign In to add comment