Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.45 KB | None | 0 0
  1. for i in range(param_niter):
  2.         # prolaz unaprijed
  3.         s1 = np.dot(X, W1.transpose()) + b1   # N x h
  4.         h1 = np.vectorize(relu)(s1) # N x h
  5.         s2 = np.dot(h1, W2.transpose()) + b2 # N x C
  6.  
  7.         expscores = np.vectorize(math.exp)(s2) # N x C
  8.         sumexp = np.sum(expscores, axis = 1)   # N x 1
  9.  
  10.         # logaritmirane vjerojatnosti razreda
  11.         probs = expscores / sumexp[:, None]    # N x C
  12.         logprobs = np.vectorize(math.log)(probs)  # N x C
  13.  
  14.         # gubitak
  15.         loss  = np.sum([ -logprobs[i][Y_[i]] for i in range(N)])     # scalar
  16.        
  17.         # dijagnostički ispis
  18.         if i % 10 == 0:
  19.             print("iteration {}: loss {}".format(i, loss))
  20.          
  21.         # prolaz unazad  
  22.         # derivacije komponenata gubitka po rezultatu
  23.         Ycode = [ [1 if Y_[i] == j else 0 for j in range(C)] for i in range(N) ]
  24.         Gs2 = probs - Ycode     # N x C
  25.         grad_W2 = 1./N * np.dot(Gs2.transpose(), h1) # C x h
  26.         grad_b2 = 1./N * np.sum(Gs2.transpose(), axis = 1) # C x 1
  27.  
  28.         Gh1 = np.dot(Gs2, W2) # N x h
  29.         Gh1[h1 == 0] = 0     # N x h
  30.         Gs1 = Gh1
  31.  
  32.         grad_W1 = 1./N * np.dot(Gs1.transpose(), X) # h x D
  33.         grad_b1 = 1./N * np.sum(Gs1.transpose(), axis = 1) # h x 1
  34.  
  35.         # poboljšani parametri
  36.         W1 += -param_delta * grad_W1
  37.         b1 += -param_delta * grad_b1
  38.         W2 += -param_delta * grad_W2
  39.         b2 += -param_delta * grad_b2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement