CNN- 數據預處理


  對於CNN輸入的數據,常見的有三種處理方式:

     1.Mean subtraction.  將數據的每一維特征都減去平均值。在numpy 中 X -= np.mean(X, axis = 0)

     2.Normalization  歸一化數據,使數據在相同尺度。 在numpy 中 X /= np.std(X, axis = 0)

 

     

     3. PCA and Whitening.  首先均值化數據,然后求協方差矩陣。
      X -= np.mean(X, axis = 0) //求均值  

      cov = np.dot( X.T, X) / X.shape[0] // 求協方差矩陣

      U,S,V = np.linalg.svd(cov) //奇異值分解,其中 U 為特征向量,S為奇異值分解向量為特征向量的平方

      Xrot = np.dot(X, U) //去除數據相關性

      Xrot_reduced = np.dot(X, U[:,:100]) 降維到 100 維

     Xwhite = Xrot / np. sqrt(s + 1e-5) //白化數據 1e-5 為防止除0

     可視化數據:例子為CIFAR-10  images

   左邊第一張圖片為CIFAR-10 中的49張圖片(每張圖片有3072個特征),第二張圖片為3072特征向量中的前144個特征,第三張圖片為通過PCA降維降到144維,使用的是圖二中的前144維,第四張圖片為白化后的圖片。

   常見的數據處理是 Mean substraction 和 Normalization.

  權重的設置

  陷阱:全零初始化  如果參數是全零,導致輸出的結果相同,那么通過反向傳播計算梯度也相同,那么參數也不會更新。

  用較小的數隨機化: W = 0.01*  np.random.randn(D,H) randn 返回的樣本滿足標准正態分布.

  標准化變量 1/sqrt(n)  W = np.random.randn(n) / sqrt(n)  或者 W = np.random.randn(n) / sqrt(2.0/n)

  初始化偏置項

   很常見的是將偏置項設置為0,ReLu 激活函數有些人會設置為 0.01, 在實際中通常設置為 W =  np. random.randn(n) * sqrt(2.0/n)

  Batch Normalization 

  發現一個講解Batch Normalization 的博客 詳見http://blog.csdn.net/hjimce/article/details/50866313

 正則化

 有多種方法來防止神經網絡的過擬合。

  L2 范式 w = w + 1/2 λw2  

  L1 范式 w = w + λ|w|  向量各元素絕對值之和

  L1會趨向於產生少量的特征,而其他的特征都是0,而L2會選擇更多的特征,這些特征都會接近於0

  Dropout 

     Dropout是指在模型訓練時隨機讓網絡某些隱含層節點的權重不工作,不工作的那些節點可以暫時認為不是網絡結構的一部分,但是它的權重得保留下來(只是暫時不更新而已),因為下次樣本輸入時它可能又得工作了。如下圖所示

 

   主要參考CS231n 課程。

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM