1. 程式人生 > >ResNet學習與實現

ResNet學習與實現

專案地址:https://github.com/zhongqianli/caffe_resnet
《Deep Residual Learning for Image Recognition》的作者提出了ResNet,通過引入深度殘差學習框架,解決了網路退化問題。核心思想是通過擬合殘差對映取代擬合潛在的對映,前者比後者更容易優化。使用1x1 conv(bottleneck)降低了網路的計算複雜度。使用《Batch normalization: Accelerating deep network training by reducing internal covariate shift》提出的Batch normalization減少internal covariate shift,允許使用更大的學習率,不再需要小心翼翼地初始化引數。

解決的問題

通過引入深度殘差學習框架,解決了退化問題。

退化問題(degradation problem):
隨著網路深度的增加,精度達到飽和並且會迅速退化。退化並不是由過擬合引起的,給一個合適深度的網路增加更多層時,訓練誤差會增加。

解決方法

用堆疊的非線性層擬合殘差對映F(x) := H(x) - x,而不是直接擬合underlying對映H(x)。原始的對映H(x)可重投射為F(x) + xF(x) + x可以由前饋神經網路和"shortcut connections"(跳躍連線、快捷連線)來實現。在這篇paper中,shortcut connections僅僅充當恆等對映。恆等的shortcut connections既沒有增加額外的引數也沒有增加計算複雜度。

y = F(x, {Wi}) + x

y = F(x, {Wi}) + Wsx

殘差方程F比較彈性,層數不小於2即可。

訓練方法

資料增強

  • 隨機裁剪
  • 水平翻轉
  • 對比度歸一化

批歸一化(batch normalization)

在每個卷積之後,啟用之前使用批歸一化

優化演算法引數

mini-batch size = 256
SGD
lr = 0.1
lr policy
weight decay: 0.0001
momentum: 0.9

實驗步驟

將cifar10資料庫轉換成lmdb資料庫檔案

用create_resnet.py生成訓練測試網路檔案,然後用github上的netscope檢查生成的訓練測試網路檔案是否正確

用create_solver.py生成solver檔案

用train_net.py進行模型訓練

用caffe/tools下的log分析工具分析log檔案,得到訓練誤差變化曲線和準確率變化曲線