caffe中網路引數更新總結

2021-07-12 03:40:31 字數 1347 閱讀 4276

前面已經總結了caffe中的foward和backward的過程,最後可以得到代價函式相對於網路中的每乙個引數的梯度,接下來就要利用梯度對網路引數進行更新。

網路引數的更新就是網路學習罪關鍵的乙個過程,怎麼利用梯度對引數更新也是乙個很重要的問題。對深度學習網路的優化也大多在這一方面,對網路引數的更新一般會遇到下面的問題:第一,簡單的網路引數更新網路可能導致網路不夠generalized,簡單的更新方式就是利用梯度和事先規定的學習速率對網路引數進行修正,這樣的方式會導致學習的網路在訓練樣本之外不夠適用,即generalization不能很好實現;第二,不當的網路引數更新方式回導致網路學習過慢,網路學習都是以梯度為基礎的,如果梯度過小,就會導致網路學習過慢,所以應該構造出有效的網路引數更新方式,加快學習速率。第三,對於網路中的不同引數,分配不同的學習速率可能會使網路學習的效果更好,而且我們也希望學習速率能根據訓練進行自適應的調整。

綜上,在引數更新中我們要解決兩個問題:讓網路更generalized和讓網路能更快地學習。

for (int param_id = 0; param_id < this->net_->learnable_params().size();

++param_id)

this->net_->update(); // update parameters for every layer

從上面可以看出,caffe先求出網路中所有引數需要更新的權值,然後再利用computeupdatevalue統一對引數更新。

先對梯度進行normalize,考慮到也許網路是經過好幾個batch之後才對引數更新,如果是這樣,就要先對網路中的梯度進行nornalize,如果是每個batch都對引數更新,那麼就不需要normalize。

接下來就是進行regularize,進行regularize的方法很多,這個在另一篇總結中已經有說,這裡採用的是l2 regularization。具體也可以看《deep learning》page 219。

然後就是根據學習速率計算每個引數需要更新的值,即conputeupdatevalue,在這個函式裡面,考慮了怎麼對網路學習進行加速,mnmentum的加速方法,具體細節以後在總結,在《deep learning》page 275也有詳細敘述,這個方法的原理和為什麼能夠加速網路的學習現在還沒有完全搞懂。

經過上面三步,網路中每個引數需要更新的值都已經計算出來了,計算的過程不複雜,但用到的generalization和引數學習加速的方法的原理需要事先弄清楚。這些值計算完成之後就是對網路中引數進行更新了,更新的過程就是簡單加減過程。

從上面我麼可以看出,引數的更新才是整個深度網路的重中之重,主要體現在怎麼實現網路的generalization和怎麼加快optimization,這個需要在以後深入學習深度學習網路中好好總結。

Caffe中網路的繪製

1 安裝graphviz sudo apt get install graphviz 依賴庫2 安裝pydot sudo pip install pydot3 使用命令列進行網路的繪製 第乙個引數是caffe檔案中python資料夾下的draw net.py檔案 第乙個引數 網路模型的prototx...

caffe中網路結構的視覺化

實驗工具是 ubuntu系統下的caffe 視覺化方法很多,一種是用caffe自帶的draw net.py 來實現網路結構的視覺化。具體實現如下 python caffe python draw net.py train.prototxt net.png用python命令執行draw net.py ...

pytorch中網路loss傳播和引數更新理解

tensorflow 228 266 keras 42 56 pytorch 87 252 在使用pytorch中,自己有一些思考,如下 1.loss計算和反向傳播 import torch.nn as nn criterion nn.mseloss cuda output model input ...