Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import *
- import random
- H = 6
- W = []
- MW = []
- B = []
- for i in range(H):
- W.append([random.uniform(-0.5,0.5),random.uniform(-0.5,0.5)])
- MW.append([0,0])
- B.append(random.uniform(-0.5,0.5))
- O = []
- MO = []
- b = 0
- for i in range(H):
- O.append(random.uniform(-0.5,0.5))
- MO.append(0)
- b = random.uniform(-0.5,0.5)
- def sig(x):
- return 1 / (1 + exp(-x))
- def sig_prime(x): # x already sigmoided
- return x * (1 - x)
- def tanh_prime(x): # x already tanhed
- return 1 - x * x
- def forward(i1,i2):
- global W,B,O,b
- h = []
- for i in range(len(W)):
- h.append(sig(W[i][0] * i1 + W[i][1] * i2 + B[i]))
- o = 0
- for i in range(len(O)):
- o += O[i] * h[i]
- o += b
- return sig(o)
- def learn(i1,i2,t):
- global W,B,O,b,MW,MO
- alpha = 0.1
- mom = 0.8
- h = []
- for i in range(len(W)):
- h.append(sig(W[i][0] * i1 + W[i][1] * i2 + B[i]))
- o = 0
- for i in range(len(O)):
- o += O[i] * h[i]
- o += b
- o = sig(o)
- e = t - o
- do = e * sig_prime(o)
- eh = []
- for i in range(len(O)):
- eh.append(do * O[i])
- dh = []
- for i in range(len(O)):
- dh.append(eh[i] * sig_prime(h[i]))
- for i in range(len(O)):
- MO[i] = mom * MO[i] + alpha * h[i] * do
- O[i] += MO[i]
- b += alpha * do
- for i in range(len(W)):
- MW[i][0] = mom * MW[i][0] + alpha * i1 * dh[i]
- MW[i][1] = mom * MW[i][1] + alpha * i2 * dh[i]
- W[i][0] += MW[i][0]
- W[i][1] += MW[i][1]
- B[i] += alpha * dh[i]
- inputs = [[0,0],[0,1],[1,0],[1,1]]
- targets = [0,1,1,0]
- for n in range(10000):
- a = list(range(len(inputs)))
- random.shuffle(a)
- for i in a:
- learn(inputs[i][0],inputs[i][1],targets[i])
- if (n+1) % 1000 == 0:
- cost = 0
- for i in a:
- x = forward(inputs[i][0],inputs[i][1])
- cost += (targets[i]-x) * (targets[i]-x)
- print("cost ", cost/4)
- for i in range(len(inputs)):
- print(inputs[i][0],inputs[i][1],forward(inputs[i][0],inputs[i][1]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement