Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.01 KB | None | 0 0
  1. import numpy as np
  2. import data
  3. import matplotlib.pyplot as plt
  4.  
  5.  
  6. def fcann2_train(X,Y_,param_delta=0.1,param_niter=100000,param_lambda=0.001):
  7. C = max(Y_) + 1
  8. n=np.shape(X)[1]
  9. N = np.shape(X)[0]
  10. L=5
  11. b1=np.zeros((L,))
  12. W1=np.random.randn(n,L)
  13. b2=np.zeros((C,))
  14. W2=np.random.randn(L,C)
  15. # one-hot Y
  16. Yoh=data.class_to_onehot(Y_) # NxC
  17.  
  18.  
  19. for i in range(param_niter):
  20.  
  21. scores1 = np.dot(X,W1) + b1 # N x L
  22. #hidden layer
  23. h1=np.maximum(0,scores1) # N X L
  24.  
  25. scores2=np.dot(h1,W2) + b2 # N x C
  26.  
  27. #softmax
  28. expscores = np.exp(scores2)
  29.  
  30. sumexp = np.sum(expscores,axis=1).reshape(-1,1)
  31.  
  32. #probability
  33. probs=expscores/sumexp # NxC
  34. logprobs = np.log(probs) # N x C
  35.  
  36. # gubitak
  37. l_2=param_lambda/2
  38. l1=l_2*np.sum(W1**2)
  39. l2=l_2*np.sum(W2**2)
  40. loss = - np.mean(np.sum(Yoh*logprobs, axis=1)) + l1 + l2 # scalar
  41.  
  42.  
  43. if i % 10000 == 0:
  44. print("iteration {}: loss {}".format(i, loss))
  45.  
  46.  
  47. scores1[scores1 <= 0] = 0
  48. scores1[scores1 > 0] = 1
  49.  
  50. dL_ds2 = probs - Yoh # NxC dscores
  51. dL_dh1 = np.dot(dL_ds2,np.transpose(W2)) # NxL
  52. dL_ds1 = dL_dh1 * scores1 #NxL
  53.  
  54.  
  55.  
  56. #gradients
  57. grad_W2 = (1/N)*np.transpose(np.dot(np.transpose(dL_ds2),h1))# CxL
  58. grad_b2 = (1/N)*np.sum(np.transpose(dL_ds2), axis = 1) # Cx1
  59. grad_W1 = (1/N)*np.transpose(np.dot(np.transpose(dL_ds1),X)) #Lxn
  60. grad_b1 = (1/N)*np.sum(np.transpose(dL_ds1), axis=1) #Lx1
  61.  
  62. #reg
  63. grad_W2 += param_lambda*W2
  64. grad_W1 += param_lambda*W1
  65.  
  66.  
  67. #poboljšani parametri
  68. W1 += -param_delta * grad_W1
  69. b1 += -param_delta * grad_b1
  70. W2 += -param_delta * grad_W2
  71. b2 += -param_delta * grad_b2
  72.  
  73. return W1, b1, W2, b2
  74.  
  75. def fcann2_classify(X,W1,W2,b1,b2):
  76.  
  77. scores1 = np.dot(X,W1) + b1
  78. h1=np.maximum(0,scores1)
  79. scores2=np.dot(h1,W2) + b2
  80. expscores = np.exp(scores2)
  81. sumexp = np.sum(expscores,axis=1).reshape(-1,1)
  82. return expscores/sumexp
  83.  
  84. def fcann2_decfun(W1, W2, b1, b2):
  85. def classify(X):
  86. return np.argmax(fcann2_classify(X, W1, W2, b1, b2),axis=1)
  87. return classify
  88.  
  89. if __name__=="__main__":
  90. np.random.seed(100)
  91.  
  92. # get the training dataset
  93. X,Y_ = data.sample_gmm_2d(6,2,10)
  94.  
  95. # train the model
  96. W1, b1, W2, b2 = fcann2_train(X, Y_)
  97.  
  98.  
  99. # evaluate the model on the training dataset
  100. probs = fcann2_classify(X, W1, W2, b1, b2)
  101. Y=np.argmax(probs, axis=1)
  102.  
  103.  
  104. # graph the decision surface
  105. decfun = fcann2_decfun(W1, W2, b1, b2)
  106. bbox=(np.min(X, axis=0), np.max(X, axis=0))
  107. data.graph_surface(decfun, bbox, offset=0.5)
  108.  
  109. # graph the data points
  110. data.graph_data(X, Y_, Y, special=[])
  111. # show the plot
  112. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement