Advertisement
Guest User

Untitled

a guest
May 22nd, 2021
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.08 KB | None | 0 0
  1. from math import *
  2. import random
  3.  
  4. H = 6
  5. W = []
  6. MW = []
  7. B = []
  8. for i in range(H):
  9.     W.append([random.uniform(-0.5,0.5),random.uniform(-0.5,0.5)])
  10.     MW.append([0,0])
  11.     B.append(random.uniform(-0.5,0.5))
  12.  
  13. O = []
  14. MO = []
  15. b = 0
  16. for i in range(H):
  17.     O.append(random.uniform(-0.5,0.5))
  18.     MO.append(0)
  19. b = random.uniform(-0.5,0.5)
  20.  
  21. def sig(x):
  22.     return 1 / (1 + exp(-x))
  23.  
  24. def sig_prime(x): # x already sigmoided
  25.     return x * (1 - x)
  26.  
  27. def tanh_prime(x): # x already tanhed
  28.     return 1 - x * x
  29.  
  30. def forward(i1,i2):
  31.     global W,B,O,b
  32.     h = []
  33.     for i in range(len(W)):
  34.         h.append(sig(W[i][0] * i1 + W[i][1] * i2 + B[i]))
  35.     o = 0
  36.     for i in range(len(O)):
  37.         o += O[i] * h[i]
  38.     o += b
  39.     return sig(o)
  40.  
  41. def learn(i1,i2,t):
  42.     global W,B,O,b,MW,MO
  43.     alpha = 0.1
  44.     mom = 0.8
  45.     h = []
  46.     for i in range(len(W)):
  47.         h.append(sig(W[i][0] * i1 + W[i][1] * i2 + B[i]))
  48.     o = 0
  49.     for i in range(len(O)):
  50.         o += O[i] * h[i]
  51.     o += b
  52.     o = sig(o)
  53.  
  54.     e = t - o
  55.     do = e * sig_prime(o)
  56.  
  57.     eh = []
  58.     for i in range(len(O)):
  59.         eh.append(do * O[i])
  60.  
  61.     dh = []
  62.     for i in range(len(O)):
  63.         dh.append(eh[i] * sig_prime(h[i]))
  64.  
  65.     for i in range(len(O)):
  66.         MO[i] = mom * MO[i] + alpha * h[i] * do
  67.         O[i] += MO[i]
  68.     b += alpha * do
  69.  
  70.     for i in range(len(W)):
  71.         MW[i][0] = mom * MW[i][0] + alpha * i1 * dh[i]
  72.         MW[i][1] = mom * MW[i][1] + alpha * i2 * dh[i]
  73.         W[i][0] += MW[i][0]
  74.         W[i][1] += MW[i][1]
  75.         B[i] += alpha * dh[i]
  76.  
  77. inputs = [[0,0],[0,1],[1,0],[1,1]]
  78. targets = [0,1,1,0]
  79.  
  80. for n in range(10000):
  81.     a = list(range(len(inputs)))
  82.     random.shuffle(a)
  83.     for i in a:
  84.         learn(inputs[i][0],inputs[i][1],targets[i])
  85.    
  86.     if (n+1) % 1000 == 0:
  87.         cost = 0
  88.         for i in a:
  89.             x = forward(inputs[i][0],inputs[i][1])
  90.             cost += (targets[i]-x) * (targets[i]-x)
  91.         print("cost ", cost/4)
  92.  
  93. for i in range(len(inputs)):
  94.     print(inputs[i][0],inputs[i][1],forward(inputs[i][0],inputs[i][1]))
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement