成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

60行代碼徒手實現深度神經網絡

新聞 深度學習
針對當前數據數據集,選擇ReLu激活函數,采用雙隱藏層,每個隱藏層節點數設置為3是一個不錯的選擇,AUC得分為0.99979。

01

準備數據集

采用的數據集是sklearn中的breast cancer數據集,30維特征,569個樣本。訓練前進行MinMax標準化縮放至[0,1]區間。按照75/25比例劃分成訓練集和驗證集。

  1. # 獲取數據集 
  2. import numpy as np 
  3. import pandas as pd 
  4. from sklearn import datasets 
  5. from sklearn import preprocessing 
  6. from sklearn.model_selection import train_test_split 
  7. breast = datasets.load_breast_cancer() 
  8. scaler = preprocessing.MinMaxScaler() 
  9. data = scaler.fit_transform(breast['data']) 
  10. target = breast['target'
  11. X_train,X_test,y_train,y_test = train_test_split(data,target) 

02

模型結構圖

60行代碼徒手實現深度神經網絡

03

正反傳播公式

60行代碼徒手實現深度神經網絡

04

NN實現代碼

  1. import numpy as np 
  2. import pandas as pd 
  3. #定義激活函數 
  4. ReLu = lambda z:np.maximum(0.0,z) 
  5. d_ReLu = lambda z:np.where(z<0,0,1
  6. LeakyReLu = lambda z:np.maximum(0.01*z,z) 
  7. d_LeakyReLu = lambda z:np.where(z<0,0.01,1
  8. Sigmoid = lambda z:1/(1+np.exp(-z)) 
  9. d_Sigmoid = lambda z: Sigmoid(z)*(1-Sigmoid(z)) #d_Sigmoid = a(1-a) 
  10. Tanh = np.tanh 
  11. d_Tanh = lambda z:1 - Tanh(z)**2 #d_Tanh = 1 - a**2 
  12. class NNClassifier(object): 
  13.  def __init__(self,n = [np.nan,5,5,1],alpha = 0.1,ITERNUM = 50000, gfunc = 'ReLu'): 
  14.  self.n = n #各層節點數 
  15.  self.gfunc = gfunc #隱藏層激活函數 
  16.  self.alpha,self.ITERNUM = alpha,ITERNUM 
  17.  self.dfJ = pd.DataFrame(data = np.zeros((ITERNUM,1)),columns = ['J']) 
  18.  self.W,self.b = np.nan,np.nan 
  19.  # 確定各層激活函數 
  20.  self.g = [eval(self.gfunc) for i in range(len(n))]; 
  21.  self.g[-1] = Sigmoid;self.g[0] = np.nan 
  22.  # 確定隱藏層激活函數的導數 
  23.  self.d_gfunc = eval('d_' + self.gfunc) 
  24.  def fit(self,X_train,y_train): 
  25.  X,Y = X_train.T,y_train.reshape(1,-1
  26.  m = X.shape[1] #樣本個數 
  27.  n = self.n; n[0] = X.shape[0] # 各層節點數量 
  28.  # 節點值和參數初始化 
  29.  A = [np.zeros((ni,m)) for ni in n];A[0] = X #各層節點輸出值初始化 
  30.  Z = [np.zeros((ni,m)) for ni in n];Z[0] = np.nan #各層節點中間值初始化 
  31.  W = [np.nan] + [np.random.randn(n[i],n[i-1]) * 0.01 for i in range(1,len(n))] #各層系數參數 
  32.  b = [np.zeros((ni,1)) for ni in n];b[0] = np.nan #n各層偏置參數 
  33.  # 導數初始化 
  34.  dA = [np.zeros(Ai.shape) for Ai in A] 
  35.  dZ = [np.zeros(Ai.shape) for Ai in A] 
  36.  dW = [np.zeros(Wi.shape) if isinstance(Wi,np.ndarray) else np.nan for Wi in W]  
  37.  db = [np.zeros(bi.shape) if isinstance(bi,np.ndarray) else np.nan for bi in b]  
  38.  for k in range(self.ITERNUM): 
  39.  # ---------正向傳播 ---------- 
  40.  for i in range(1,len(n)): 
  41.  Z[i] = np.dot(W[i],A[i-1]) + b[i] 
  42.  A[i] = self.g[i](Z[i]) 
  43.  J = (1/m) * np.sum(- Y*np.log(A[len(n)-1]) -(1-Y)*np.log(1-A[len(n)-1])) 
  44.  self.dfJ.loc[k]['J']= J 
  45.  # ----------反向傳播 --------- 
  46.  hmax = len(n) - 1 
  47.  dA[hmax] = 1/m*(-Y/A[hmax] + (1-Y)/(1-A[hmax])) 
  48.  dZ[hmax] = 1/m*(A[hmax]-Y) 
  49.  dW[hmax] = np.dot(dZ[hmax],A[hmax-1].T) 
  50.  db[hmax] = np.dot(dZ[hmax],np.ones((m,1))) 
  51.  for i in range(len(n)-2,0,-1): 
  52.  dA[i] = np.dot(W[i+1].T,dZ[i+1]) 
  53.  dZ[i] = dA[i]* self.d_gfunc(Z[i]) 
  54.  dW[i] = np.dot(dZ[i],A[i-1].T) 
  55.  db[i] = np.dot(dZ[i],np.ones((m,1))) 
  56.  #-----------梯度下降 --------- 
  57.  for i in range(1,len(n)): 
  58.  W[i] = W[i] - self.alpha*dW[i]  
  59.  b[i] = b[i] - self.alpha*db[i] 
  60.  # 顯示進度 
  61.  if (k+1)%1000 == 0
  62.  print('progress rate:{}/{}'.format(k+1,self.ITERNUM),end = '\r'
  63.  self.W,self.b = W,b 
  64.  def predict_prob(self,X_test): 
  65.  # ---------正向傳播 ---------- 
  66.  W,b = self.W,self.b 
  67.  Ai = X_test.T 
  68.  for i in range(1,len(self.n)): 
  69.  Zi = np.dot(W[i],Ai) + b[i] 
  70.  Ai = self.g[i](Zi) 
  71.  return(Ai.reshape(-1)) 
  72.  def predict(self,X_test): 
  73.  Y_prob = self.predict_prob(X_test) 
  74.  Y_test = Y_prob.copy() 
  75.  Y_test[Y_prob>=0.5] = 1 
  76.  Y_test[Y_prob< 0.5] = 0 
  77.  return(Y_test)  

05

單隱層神經網絡

設置1個隱藏層,隱藏層節點數為5,隱藏層使用Sigmoid激活函數。

  1. # 采用Sigmoid激活函數 
  2. NN = NNClassifier(n = [np.nan,5,1],alpha = 0.02
  3.  ITERNUM = 200000, gfunc = 'Sigmoid'
  4. NN.fit(X_train,y_train) 
  5. # 繪制目標函數迭代曲線 
  6. %matplotlib inline 
  7. NN.dfJ.plot(figsize = (12,8)) 
  8. # 測試在驗證集的auc得分 
  9. from sklearn.metrics import roc_auc_score 
  10. Y_prob = NN.predict_prob(X_test) 
  11. roc_auc_score(list(y_test),list(Y_prob)) 
60行代碼徒手實現深度神經網絡

隱藏層使用Tanh激活函數。

  1. # 采用 Tanh激活函數 
  2. NN = NNClassifier(n = [np.nan,5,1],alpha = 0.02
  3.  ITERNUM = 200000, gfunc = 'Tanh'
  4. NN.fit(X_train,y_train) 
  5. # 繪制目標函數迭代曲線 
  6. %matplotlib inline 
  7. NN.dfJ.plot(figsize = (12,8)) 
  8. # 測試在驗證集的auc得分 
  9. from sklearn.metrics import roc_auc_score 
  10. Y_prob = NN.predict_prob(X_test) 
  11. roc_auc_score(list(y_test),list(Y_prob)) 
60行代碼徒手實現深度神經網絡

隱藏層使用ReLu激活函數。

  1. # 采用 ReLu激活函數 
  2. NN = NNClassifier(n = [np.nan,5,1],alpha = 0.02
  3.  ITERNUM = 200000, gfunc = 'ReLu'
  4. NN.fit(X_train,y_train) 
  5. # 繪制目標函數迭代曲線 
  6. %matplotlib inline 
  7. NN.dfJ.plot(figsize = (12,8)) 
  8. # 測試在驗證集的auc得分 
  9. from sklearn.metrics import roc_auc_score 
  10. Y_prob = NN.predict_prob(X_test) 
  11. roc_auc_score(list(y_test),list(Y_prob)) 
60行代碼徒手實現深度神經網絡

隱藏層使用LeakyReLu激活函數。

  1. # 采用 LeakyReLu激活函數 
  2. NN = NNClassifier(n = [np.nan,5,1],alpha = 0.02
  3.  ITERNUM = 200000, gfunc = 'LeakyReLu'
  4. NN.fit(X_train,y_train) 
  5. # 繪制目標函數迭代曲線 
  6. %matplotlib inline 
  7. NN.dfJ.plot(figsize = (12,8)) 
  8. # 測試在驗證集的auc得分 
  9. from sklearn.metrics import roc_auc_score 
  10. Y_prob = NN.predict_prob(X_test) 
  11. roc_auc_score(list(y_test),list(Y_prob)) 
60行代碼徒手實現深度神經網絡

以上試驗似乎表明,在當前的數據集上,隱藏層采用ReLu激活函數是一個最好的選擇,AUC最高得分為0.99958。

06

雙隱層神經網絡

設置2個隱藏層,隱藏層節點數都為5,隱藏層都使用ReLu激活函數。

  1. # 設置兩個隱藏層,采用ReLu激活函數 
  2. NN = NNClassifier(n = [np.nan,5,5,1],alpha = 0.02
  3.  ITERNUM = 200000, gfunc = 'ReLu'
  4. NN.fit(X_train,y_train) 
  5. # 繪制目標函數迭代曲線 
  6. %matplotlib inline 
  7. NN.dfJ.plot(figsize = (12,8)) 
  8. # 測試在驗證集的auc得分 
  9. from sklearn.metrics import roc_auc_score 
  10. Y_prob = NN.predict_prob(X_test) 
  11. roc_auc_score(list(y_test),list(Y_prob)) 
60行代碼徒手實現深度神經網絡

AUC得分0.99874比采用單隱藏層的最優得分0.99958有所降低,可能是模型復雜度過高,我們嘗試減少隱藏層節點的個數至3以降低模型復雜度。

  1. # 雙隱藏層,隱藏層節點數為3 
  2. NN = NNClassifier(n = [np.nan,3,3,1],alpha = 0.02
  3.  ITERNUM = 200000, gfunc = 'ReLu'
  4. NN.fit(X_train,y_train) 
  5. # 繪制目標函數迭代曲線 
  6. %matplotlib inline 
  7. NN.dfJ.plot(figsize = (12,8)) 
  8. # 測試在驗證集的auc得分 
  9. from sklearn.metrics import roc_auc_score 
  10. Y_prob = NN.predict_prob(X_test) 
  11. roc_auc_score(list(y_test),list(Y_prob)) 
60行代碼徒手實現深度神經網絡

AUC得分0.99979,又有所提高。

和sklearn中自帶的神經網絡分類器進行對比。

  1. # 和sklearn中的模型對比 
  2. from sklearn.neural_network import MLPClassifier 
  3. # 第一隱藏層神經元個數為3,第二隱藏層神經元個數為3 
  4. MLPClf = MLPClassifier(hidden_layer_sizes=(3,3),max_iter=200000,activation='relu'
  5. MLPClf.fit(X_train,y_train) 
  6. # 繪制目標函數迭代曲線 
  7. dfJ = pd.DataFrame(data = np.array(MLPClf.loss_curve_),columns = ['J']) 
  8. dfJ.plot(figsize = (12,8)) 
  9. # 測試在驗證集的auc得分 
  10. from sklearn.metrics import roc_auc_score 
  11. Y_prob = MLPClf.predict_proba(X_test)[:,1
  12. roc_auc_score(list(y_test),list(Y_prob)) 
60行代碼徒手實現深度神經網絡

以上試驗表明,針對當前數據數據集,選擇ReLu激活函數,采用雙隱藏層,每個隱藏層節點數設置為3是一個不錯的選擇,AUC得分為0.99979。該得分高于采用CV交叉驗證優化超參數后的邏輯回歸模型的0.99897的AUC得分。

責任編輯:張燕妮 來源: 數智物語
相關推薦

2019-05-05 09:46:01

Python代碼神經網絡

2020-04-20 13:45:32

神經網絡模型代碼

2017-12-22 08:47:41

神經網絡AND運算

2017-09-18 08:08:33

JavaScript神經網絡代碼

2017-09-15 13:35:11

JavaScript神經網絡

2019-11-08 10:17:41

人工智能機器學習技術

2017-03-22 11:59:40

深度神經網絡

2016-12-27 14:24:57

課程筆記神經網絡

2025-02-25 10:50:11

2022-02-08 12:30:30

React事件系統React事件系統

2025-02-25 14:13:31

2023-09-03 14:17:56

深度學習人工智能

2018-07-03 16:10:04

神經網絡生物神經網絡人工神經網絡

2021-03-29 09:02:24

深度學習預測間隔

2018-04-08 11:20:43

深度學習

2017-04-26 08:31:10

神經網絡自然語言PyTorch

2023-02-28 08:00:00

深度學習神經網絡人工智能

2023-04-19 10:17:35

機器學習深度學習

2019-07-20 11:00:00

神經網絡數據圖形

2017-01-10 17:25:59

深度學習框架神經網絡
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区国产精品 | av看片网站 | 亚洲第一在线 | 不卡视频在线 | 女同videos另类| 色综合成人网 | 99国产精品视频免费观看一公开 | 欧美日韩综合 | 欧美精品一区二区三区在线播放 | av在线成人 | 伊人网影院| 无吗视频| 天天操网 | 国产永久免费 | 欧美在线成人影院 | 一级黄色av电影 | 97免费视频在线观看 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 91久久爽久久爽爽久久片 | 午夜在线 | 午夜精品视频 | 视频一区二区在线观看 | 一区二区三区日 | 成人精品一区 | 国产精品不卡一区 | 伊人伊人伊人 | 国产精品免费av | 亚洲三级在线观看 | 久久一级大片 | 黑人精品欧美一区二区蜜桃 | 精品国产一区二区三区性色av | 欧美video | aaa在线观看 | 国产精品久久久久久av公交车 | 黄色在线观看国产 | 99久久99| 国产女人第一次做爰毛片 | 亚洲精品乱码久久久久久蜜桃91 | 免费观看一级黄色录像 | 午夜寂寞福利视频 | 一级做a爰片久久毛片 |