1. 程式人生 > >機器學習(啟用函式-BN-引數優化)

機器學習(啟用函式-BN-引數優化)

1. 機器學習流程簡介

    1)一次性設定(One time setup)
          - 啟用函式(Activation functions)

          - 資料預處理(Data Preprocessing)

          - 權重初始化(Weight Initialization)

          - 正則化(Regularization:避免過擬合的一種技術)

          - 梯度檢查(Gradient checking)

    2)動態訓練(Training dynamics)
          - 跟蹤學習過程 (Babysitting the learning process)

          - 引數更新 (Parameter updates)

          - 超級引數優化(Hyperparameter optimization)

          - 批量歸一化(BN:Batch Normalization:解決在訓練過程中,中間層資料分佈發生改變的問題,以防止梯度消失或爆炸、加快訓練速度
    3)評估(Evaluation)
          - 模型組合(Model ensembles)

             (訓練多個獨立的模型,測試時,取這些模型結果的平均值)

   神經網路學習過程本質就是為了:學習資料分佈,一旦訓練資料與測試資料的分佈不同,那麼網路的泛化能力也大大降低,所以需要使用輸入資料歸一化方法,使訓練資料與測試資料的分佈相同。

2. 啟用函式(Activation Functions)

    詳細內容參見:啟用函式

    總結:

     1)使用ReLU時,使Learning Rates儘量小

     2)嘗試使用Leaky ReLU/Maxout/ELU

     3)可以使用tanh,但期望不要太高

     4)不要使用sigmoid

3. 資料預算處理(Data Preprocessing)

     1)為什麼輸入資料需要歸一化(Normalized Data)?

           歸一化後有什麼好處呢?原因在於神經網路學習過程本質就是為了學習資料分佈,一旦訓練資料與測試資料的分佈不同,那麼網路的泛化能力也大大降低;另外一方面,一旦每批訓練資料的分佈各不相同(batch 梯度下降),那麼網路就要在每次迭代都去學習適應不同的分佈,這樣將會大大降低網路的訓練速度,這也正是為什麼我們需要對資料都要做一個歸一化預處理的原因。

          對於深度網路的訓練是一個複雜的過程,只要網路的前面幾層發生微小的改變,那麼後面幾層就會被累積放大下去。一旦網路某一層的輸入資料的分佈發生改變,那麼這一層網路就需要去適應學習這個新的資料分佈,所以如果訓練過程中,訓練資料的分佈一直在發生變化,那麼將會影響網路的訓練速度。

4. 權重初始化(Weight Initialization)

    1)小的隨機數

         w= 0.01 * np.random.randn(fan_in,fan_out)

    2)神經元將飽和,梯度為0

         w = 1.0 * np.random.randn(fan_in,fan_out)

    3)合理的初始化(Xavier init)

         w = np.random.randn((fan_in,fan_out)/np.sqrt(fan_in)

    權重初始化是一個重要的研究領域。

5. 批量歸一化(BN: Batch Normalization)

5.1 BN訓練    

    1)隨機梯度下降法(SGD)對於訓練深度網路簡單高效,但是它有個毛病,就是需要我們人為的去選擇引數,比如學習率、引數初始化、權重衰減係數、Drop out比例等。這些引數的選擇對訓練結果至關重要,以至於我們很多時間都浪費在這些的調參上。那麼使用BN(詳見論文《Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift》)之後,你可以不需要那麼刻意的慢慢調整引數

    2)神經網路一旦訓練起來,那麼引數就要發生更新,除了輸入層的資料外(因為輸入層資料,我們已經人為的為每個樣本歸一化),後面網路每一層的輸入資料分佈是一直在發生變化的,因為在訓練的時候,前面層訓練引數的更新將導致後面層輸入資料分佈的變化。以網路第二層為例:網路的第二層輸入,是由第一層的引數和input計算得到的,而第一層的引數在整個訓練過程中一直在變化,因此必然會引起後面每一層輸入資料分佈的改變。我們把網路中間層在訓練過程中,資料分佈的改變稱之為:“Internal  Covariate Shift”。Paper所提出的演算法,就是要解決在訓練過程中,中間層資料分佈發生改變的情況,於是就有了Batch  Normalization,這個牛逼演算法的誕生。

   3)BN的地位:與啟用函式層、卷積層、全連線層、池化層一樣,BN(Batch Normalization)也屬於網路的一層。

   4)BN的本質原理:在網路的每一層輸入的時候,又插入了一個歸一化層,也就是先做一個歸一化處理(歸一化至:均值0、方差為1),然後再進入網路的下一層。不過文獻歸一化層,可不像我們想象的那麼簡單,它是一個可學習、有引數(γ、β)的網路層

   5)歸一化公式:

        

   6)如果是僅僅使用上面的歸一化公式,對網路某一層A的輸出資料做歸一化,然後送入網路下一層B,這樣是會影響到本層網路A所學習到的特徵的。比如我網路中間某一層學習到特徵資料本身就分佈在S型啟用函式的兩側,你強制把它給我歸一化處理、標準差也限制在了1,把資料變換成分佈於s函式的中間部分,這樣就相當於我這一層網路所學習到的特徵分佈被你搞壞了,這可怎麼辦?於是文獻使出了一招驚天地泣鬼神的招式:變換重構,引入了可學習引數γ、β,這就是演算法關鍵之處:

       

       上面的公式表明,通過學習到的重構引數γ、β是可以恢復出原始的某一層所學到的特徵的。

     7)引入了這個可學習重構引數γ、β,讓我們的網路可以學習恢復出原始網路所要學習的特徵分佈。最後Batch Normalization網路層的前向傳導過程公式就是:

             

             

     8)BN層是對於每個神經元做歸一化處理,甚至只需要對某一個神經元進行歸一化,而不是對一整層網路的神經元進行歸一化。既然BN是對單個神經元的運算,那麼在CNN中卷積層上要怎麼搞?假如某一層卷積層有6個特徵圖,每個特徵圖的大小是100*100,這樣就相當於這一層網路有6*100*100個神經元,如果採用BN,就會有6*100*100個引數γ、β,這樣豈不是太恐怖了。因此卷積層上的BN使用,其實也是使用了類似權值共享的策略,把一整張特徵圖當做一個神經元進行處理

    9)卷積神經網路經過卷積後得到的是一系列的特徵圖,如果min-batch sizes為m,那麼網路某一層輸入資料可以表示為四維矩陣(m,f,w,h),m為min-batch sizes,f為特徵圖個數,w、h分別為特徵圖的寬高。在CNN中我們可以把每個特徵圖看成是一個特徵處理(一個神經元),因此在使用Batch Normalization,mini-batch size 的大小就是:m*w*h,於是對於每個特徵圖都只有一對可學習引數:γ、β。說白了吧,這就是相當於求取所有樣本所對應的一個特徵圖的所有神經元的平均值、方差,然後對這個特徵圖神經元做歸一化。

    10)    在使用BN前,減小學習率、小心的權重初始化的目的是:使其輸出的資料分佈不要發生太大的變化。

    11) BN的作用:

       1)改善流經網路的梯度

       2)允許更大的學習率,大幅提高訓練速度

            你可以選擇比較大的初始學習率,讓你的訓練速度飆漲。以前還需要慢慢調整學習率,甚至在網路訓練到一半的時候,還需要想著學習率進一步調小的比例選擇多少比較合適,現在我們可以採用初始很大的學習率,然後學習率的衰減速度也很大,因為這個演算法收斂很快。當然這個演算法即使你選擇了較小的學習率,也比以前的收斂速度快,因為它具有快速訓練收斂的特性;

       3)減少對初始化的強烈依賴

       4)改善正則化策略:作為正則化的一種形式,輕微減少了對dropout的需求

            你再也不用去理會過擬閤中drop out、L2正則項引數的選擇問題,採用BN演算法後,你可以移除這兩項了引數,或者可以選擇更小的L2正則約束引數了,因為BN具有提高網路泛化能力的特性;

       5)再也不需要使用使用區域性響應歸一化層了(區域性響應歸一化是Alexnet網路用到的方法,搞視覺的估計比較熟悉),因為BN本身就是一個歸一化網路層;

       6)可以把訓練資料徹底打亂(防止每批訓練的時候,某一個樣本都經常被挑選到,文獻說這個可以提高1%的精度)。

       注:以上為學習過程,在測試時,均值和方差(mean/std)不基於小批量進行計算, 可取訓練過程中的啟用值的均值。

5.2 BN測試

     1)實際測試時,我們依然使用下面的公式:

         

        這裡的均值和方差已經不是針對某一個Batch了,而是針對整個資料集而言。因此,在訓練過程中除了正常的前向傳播和反向求導之外,我們還要記錄每一個Batch的均值和方差,以便訓練完成之後按照下式計算整體的均值和方差:

       上面簡單理解就是:對於均值來說直接計算所有batch u值的平均值;然後對於標準偏差採用每個batch σB的無偏估計。最後測試階段,BN的使用公式就是:

        

     2)BN可以應用於一個神經網路的任何神經元上。文獻主要是把BN變換,置於網路啟用函式層的前面。在沒有采用BN的時候,啟用函式層是這樣的:

                              z=g(Wu+b)

          也就是我們希望一個啟用函式,比如s型函式s(x)的自變數x是經過BN處理後的結果。因此前向傳導的計算公式就應該是:
                              z=g(BN(Wu+b))

          其實因為偏置引數b經過BN層後其實是沒有用的,最後也會被均值歸一化,當然BN層後面還有個β引數作為偏置項,所以b這個引數就可以不用了。因此最後把BN層+啟用函式層就變成了:

                               z=g(BN(Wu))

6. 跟蹤訓練過程

   1)Learning Rate

         - Learning Rate太小(如1e-6),cost下降很慢

         - Learning Rate太大(如1e-6),cost增長爆炸 (cur cost > 3* original cost)

         - 在[1e-3,1e-5]範圍內比較合適

       

     2)Mini-batch SGD

           Loop:

           1. Sample a batch of data

           2. Forward prop it through the graph, get loss

           3. Backprop to calculate the gradients

           4. Update the parameters using gradient

7. 引數優化

    引數優化的目的是:減少損失(loss), 直至損失收斂(convergence)

7.1 Gradient Descent Variants

7.1.1 Batch gradient descent

            每次基於整個資料集計算梯度
  1. for i in range(nb_epochs):  
  2.   params_grad = evaluate_gradient(loss_function, data, params)  
  3.   params = params - learning_rate * params_grad  

7.1.2 SGD(Stochastic Gradient Descent: 隨機梯度下降)

       

     每次基於一個數據樣本計算梯度

  1. for i in range(nb_epochs):  
  2.   np.random.shuffle(data)  
  3.   for example in data:  
  4.     params_grad = evaluate_gradient(loss_function, example, params)  
  5.     params = params - learning_rate * params_grad  

7.1.3 Mini-batch Gradient Descent

       

    每次基於n個數據樣本計算梯度。

  1. for i in range(nb_epochs):  
  2.   np.random.shuffle(data)  
  3.   for batch in get_batches(data, batch_size=50):  
  4.     params_grad = evaluate_gradient(loss_function, batch, params)  
  5.     params = params - learning_rate * params_grad  
   優點:

    1)減少引數更新的變化, 從而得到更加穩定的收斂

    2)使用先進的Deep Learning庫,可以高效地計算mini-batch的梯度

    注:n一般取[50,256]範圍內的數,視具體應用而定。

7.1.4 梯度下降演算法面臨的挑戰

   1)選擇合適的Learning Rate是困難的,太小導致收斂慢,太大阻礙收斂或且導致損失函式在最小值附近波動或發散;
   2)預先定義的Learning Rate變動規則不能適應資料集的特性
   3)同樣的Learning Rate運用到所有的引數更新(後面的AdaGrad, AdaDelta, RMSProp, Adam為解決此問題而生)
   4)最小化高度非凸損失函式的羝問題是:避免陷入眾多的區域性最優值。    

7.2 Momentum(動量)

關鍵優點: 利用物體運動時的慣性,加快到達全域性最優點的速度,且減少振盪。

      關鍵缺點:球盲目地沿著斜坡向山下滾。

       

     當Loss function的表面曲線的一維比其它維有更多的溝壑時,SGD要跨越此溝壑是困難的,如上圖左邊所示,SGD沿著溝壑的斜坡振盪,然後猶猶豫豫地向區域性最優點前進。

     Momentum即動量,它模擬的是物體運動時的慣性,即更新的時候在一定程度上保留之前更新的方向,同時利用當前batch的梯度微調最終的更新方向。這樣一來,可以在一定程度上增加穩定性,從而學習地更快,並且還有一定擺脫區域性最優的能力: 


  1. # Momentum update
  2. V = gama * V + learning_rate * dw  # integrate velocity
  3. w -= V                             # integrate position

     就是Momentum,經常取0.5,0.9,或0.99,有時隨著時間而變化,從0.5到0.99;表示要在多大程度上保留原來的更新方向,這個值在0-1之間,在訓練開始時,由於梯度可能會很大,所以初始值一般選為0.5;當梯度不那麼大時,改為0.9。 是學習率,即當前batch的梯度多大程度上影響最終更新方向,跟普通的SGD含義相同。之和不一定為1。

     Momentum的物理解釋是:當我們把球推下山時,球不斷地累積其動量,速度越來越快(直到其最大速度,如果有空氣阻力,如<1),同樣的事情發生在引數更新中:梯度保持相同方向的維度的動量不停地增加,梯度方向不停變化的維度的動量不停地減少,因此可以得到更快的收斂速度並減少振盪

     

7.3 Nesterov Accelerated Gradient (NAG)

      關鍵優點:一個聰明的球,知道它將到哪兒去,且知道在斜坡向上之前減速。

                        沿著當前方向,先走一步,然後再看向哪個方向走最快,這樣對前方的情況就有了更多地瞭解,可以做出明智的決策。


    

     

  1. w_ahead = w - gama * v  
  2. # evaluate dw_ahead (the gradient at w_ahead instead of at w)
  3. v = gama * v + learning_rate * dw_ahead  
  4. w -= v  

       Momentum:

            1)計算當前的梯度(上圖中:比較小的藍色向量)

            2)沿著更新的累積的梯度方向進行一大跳(上圖中:比較大的藍色向量)

       NAG:

            1)沿著以前累積的梯度方向進行一大跳 (上圖中:棕色向量)

            2)在新的位置測量梯度,然後進行校正(上圖中:綠色向量)

            3)這個有預料的更新可以防止走的太快並導致增加的響應

       關鍵區別:

            1)計算梯度的位置不一樣

7.4 每個引數有自適應的學習率(Per-parameter Adaptive Learning Rate)

      本章描述的方法(AdaGrad、AdaDelta、RMSprop、Adam)專為解決Learning Rate自適應的問題。

      前面討論的基於梯度的優化方法(SGD、Momentum、NAG)的Learning Rate是全域性的,且對所有引數是相同的。

      引數的有些維度變化快,有些維度變化慢;有些維度是負的斜坡,有些維度是正的斜坡(如鞍點);採用相同的Learning Rate是不科學的,比如有的引數可能已經到了僅需要微調的階段,但又有些引數由於對應樣本少等原因,還需要較大幅度的調動。理想的方案是根據引數每個維度的變化率,採用對應的Learning Rate。

      下面討論如何自適應Learing Rate的方案:AdaGrad、AdaDelta、RMSProp、Adam。

7.4.1 AdaGrad(Adaptive Gradient )

     關鍵優點:不需要手動調整Learning Rate,預設值為0.01即可。     關鍵缺點:在分母中累積了梯度的平方,且此累積值單調遞增,從而導致Learning Rate單調遞減,直至無限小,從而不能再學到相關知識(AdaDelta、RMSprop、Adam專為解決此問題而生)。

     AdaGrad方法給引數的每個維度給出適應的Learning Rate。給不經常更新的引數以較大的Learning Rate, 給經常更新的引數以較小的Learning Rate。Google使用此優化方法“識別Youtube視訊中的貓” 。

     在AdaGrad中,每個引數在每一次更新時都使用不同的Learming Rate。

     其公式如下:

    
θi

     其示意程式碼如下:

  1. # Assume the gradient dx and parameter vector x
  2. cache += dx**2
  3. x -= learning_rate * dx / (np.sqrt(cache + 1e-8))  

     learning_rate 是初始學習率,由於之後會自動調整學習率,所以初始值就不像之前的演算法那樣重要了。而1e-8指一個比較小的數,用來保證分母非0。

     其含義是,對於每個引數,隨著其更新的總距離增多,其學習速率也隨之變慢。


7.4.2 AdaDelta (Adaptive Delta)

    關鍵優點:1) 解決了AdaGrad Learning Rate單調遞減的問題。 (是AdaGrad的擴充套件)

                      2) 不需要設定預設的Learning Rate 

   RMS(Root Mean Squared) : 均方根

 Adagrad演算法存在三個問題:

    1)其學習率是單調遞減的,訓練後期學習率非常小
    2)其需要手工設定一個全域性的初始學習率
    3)更新W時,左右兩邊的單位不同
    Adadelta針對上述三個問題提出了比較漂亮的解決方案。

    


7.4.3 RMSprop

     RMSprop是由Geoff Hinton設計的。RMSprop與AdaDelta的目的一樣:解決AdaGrad的Learning Rate逐步消失的問題。

    

7.4.4 Adam (Adaptive Moment Estimation)

    Adam的目的是:為每個引數計算自適應的Learning Rate。

    

     其實際效果與AdaDelta、RMSProp相比,毫不遜色!

7.5 優化演算法效果視覺化

    

              SGD optimization on Beale's function

    

                SGD optimization on Long Valley

      

                SGD optimization on Saddle Point

7.6 如何選擇優化演算法

     1)總結:

           - RMSprop是AdaGrad的擴充套件,以解決learning rate逐步消失的問題

           - RMSprop與AdaDelta相比,AdaDelta在分子更新規則中使用了引數RMS更新,其它相同

           - Adam與RMSprop相比,增加了偏差校正和動量

           - RMSprop、AdaDelta和Adam是非常類似的演算法,在類似的環境下,效果相當

           - 從整體上看,Adam目前是最好的選擇

     2)如果輸入資料是稀疏的(sparse),使用adaptive learning-rate(AdaGrad、AdaDelta、RMSprop、Adam)可以獲得最好的結果,且不需要調整learning rate;

     3)如果你關心快速收斂,你應當選擇adaptive learning-rate方法

7.7 優化SGD的其它策略

7.7.1 Shuffling and Curriculum Learning

      1)Shuffling:每次迭代前,隨機打亂訓練樣本的順序

      2)Curriculum Learning:把訓練樣本按某種有意義的方式進行排序,對逐步解決困難問題有效。

7.7.2 批量歸一化Batch Normalization (BN)        

      為了便於訓練,我們經常歸一化引數的初始值,通過mean=0, variance=1的高斯分佈來初始化引數。在訓練過程中,我們不同程度地更新引數,使用引數失去了歸一化,這將降低訓練速度且放大變化,網路越深問題越嚴重。

      BN為每一個mini-batch重建歸一化引數。使模型結構的部分進行歸一化,我們可以使用更高的learning rate,且引數初始化要求沒哪麼高。

      此外,BN還作為一個正則化(Regularizer),可以減少或避免使用Dropout。

      正則化(Regularizer):是一個用於解決過擬合(Overfitting)問題的一種技術。具體實現方法是在損失函式中增加懲罰因子(引數向量的範數,1範數(L1)或2範數(L2))lambda*N(w)。

7.7.3 早期停止(Early Stopping)

     在訓練時,總是監視驗證集的錯誤率,如果驗證集的錯誤率不能得到改善,應當停止訓練。

8. Regularization: Dropout

    在前向計算時,隨機設定一些神經元的值為0,如下圖所示:

    

    示意程式碼如下:

  1. p = 0.5# probability of keeping a unit active, higher = less dropout
  2. def train_step(X)  
  3.    """ X contains the data """
  4.    # forward pass for example 3-layer neural network
  5.    H1 = np.maximum(0, np.dot(W1, X) + b1)  
  6.    M1 = np.random.rand(*H1.shape) < p  # first dropout mask
  7.    H1 *= M1   # drop
  8. 相關推薦

    機器學習啟用函式-BN-引數優化

    1. 機器學習流程簡介    1)一次性設定(One time setup)          - 啟用函式(Activation functions)          - 資料預處理(Data Preprocessing)          - 權重初始化(Weight

    深度學習技巧啟用函式-BN-引數優化等等

    轉自https://blog.csdn.net/myarrow/article/details/51848285 1. 深度學習技巧簡介     1)一次性設定(One time setup)           -&nb

    機器學習Machine Learning and Data MiningCS 5751——Lab1作業記錄

    Activity3 繪製散點圖矩陣,顯示屬性之間的相關性: mpg,hp,disp,drat,wt,qsec。 使用散點圖,評論哪些屬性對具有最高的相關性。 plot(mtcars$wt, mtcars$mpg, main="WT vs. MPG", xla

    機器學習周志華西瓜書學習筆記1:第三章-線性模型

    一、線性迴歸     線性迴歸的基本思想是採用對輸入樣例各個特徵進行線性加權的方式得到預測的輸出,並將預測的輸出和真實值的均方誤差最小化。1)如果輸入樣例只有一個特徵,那這個過程就是用一條直線去擬合平面直角座標系上的點; 2)如果有兩個特徵,表現在平面直角座標系上就是用一條

    用Python開始機器學習4:KNN分類演算法 sklearn做KNN演算法 python

    http://blog.csdn.net/lsldd/article/details/41357931 1、KNN分類演算法 KNN分類演算法(K-Nearest-Neighbors Classification),又叫K近鄰演算法,是一個概念極其簡單,而分類效果又很優秀的

    用Python開始機器學習7:邏輯迴歸分類

    在本系列文章中提到過用Python開始機器學習(3:資料擬合與廣義線性迴歸)中提到過迴歸演算法來進行數值預測。邏輯迴歸演算法本質還是迴歸,只是其引入了邏輯函式來幫助其分類。實踐發現,邏輯迴歸在文字分類領域表現的也很優秀。現在讓我們來一探究竟。1、邏輯函式假設資料集有n個獨立的

    深度學習-機器學習神經網路的應用 下

    ********************************先看程式碼後面解釋********************************#神經網路演算法(Neural Network) import numpy as np def tanh(x): #雙曲函式

    機器學習臺灣李巨集毅版學習筆記 gradient descent

           梯度下降屬於線性迴歸的一個重要的部分。但是這種方法具有侷限性,在一般的情況下,並不能保證找到的區域性最小就是全域性最小。所以這種方法適用於目標函式是凸函式的情況(local minimum == global minimum)。即使是在凸函式中也不能保證最後找到

    用Python開始機器學習4:KNN分類演算法

    1、KNN分類演算法KNN分類演算法(K-Nearest-Neighbors Classification),又叫K近鄰演算法,是一個概念極其簡單,而分類效果又很優秀的分類演算法。他的核心思想就是,要確定測試樣本屬於哪一類,就尋找所有訓練樣本中與該測試樣本“距離”最近的前K個

    機器學習3:sigmod函式與分類啟用函式的來龍去脈

    sigmod函式: sigmod函式是常用的啟用函式,函式特點如上,用來表示分類概率。表面上看,是因為函式曲線正好可以用來描述概率關係0-1之間,並且有無限趨近的特點;實際上,sigmod函式確實與分類概率存在特定的聯絡。 具體分析如下: 在bayes分類中,後驗概率表示為

    機器學習與深度學習系列連載: 第二部分 深度學習可以自己學習啟用函式Maxout

    可以自己學習的啟用函式(Maxout) 在深度學習中啟用函式有sigma, tanh, relu,還有以後會將到的selu,但是有沒有一個啟用函式不是人為設定的,是機器學出來的呢?對抗網路(GAN)之父Goodfellow,給我們一個肯定的答案。Learnabl

    機器學習啟用函式Activation Function

    0. 啟用函式 上圖為wiki上的定義:啟用函式定義了每個節點(神經元)的輸出和輸入關係的函式。 下表:常用啟用函式 編號 函數 公式 1) sigmoid(

    機器學習 優化演算法利器之梯度下降Gradient Descend

    理解:機器學習各種演算法的求解最終出來的幾乎都是求解最優模型引數的優化問題。 前言        在優化問題領域有些很多優秀思想和演算法,從約束條件分類 分為無約束條件的優化和有約束條件的優化問題,有約束條

    吳恩達機器學習正規方程求解線性迴歸引數

    目錄 0. 前言 學習完吳恩達老師機器學習課程的多變數線性迴歸,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。 0. 前言 線上性迴歸中,通常採用梯度下降,不斷迭代

    機器學習 numpy的函式以及基本用法

    新開一個篇章,記錄一下機器學習與資料科學的學習過程。 1.np.getnfromtxt 從txt檔案中讀資料,np.getnfromtxt('filename.txt', delimiter=',', dtype='...', skip_header=1) 2.np

    Python學習16--裝飾器2功能函式引數

    import time def show_time(func): def wrapper(*x): start_time = time.time() func(*x) end_time = time.time() print

    機器學習與Tensorflow3—— 機器學習及MNIST資料集分類優化

    一、二次代價函式 1. 形式:   其中,C為代價函式,X表示樣本,Y表示實際值,a表示輸出值,n為樣本總數 2. 利用梯度下降法調整權值引數大小,推導過程如下圖所示: 根據結果可得,權重w和偏置b的梯度跟啟用函式的梯度成正比(即啟用函式的梯度越大,w和b的大小調整的越快,訓練速度

    JVM虛擬機器學習虛擬機器引數

                                      JVM虛擬機器學習(虛擬機器引數)  

    機器學習-累計分佈函式CDF

    1.累計分佈函式(The Cumulative Distribution Function):在x點左側事件發生的總和。 累計分佈函式的特性: ①因為累計分佈函式是計算x點左側的點的數量,所以累計分佈函式CDF是單調遞增的。 ②CDF比沒有直方圖變化劇烈,但是CDF

    深度學習啟用函式Python實現

    import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from tensorflow.python.framework import ops ops.reset_defau