理解CNN神經網絡

  • 首先構建好用於學習的模型,也就是各個層用什麼激活函數、輸出層的如softmax函數、各層神經元的個數、損失函數等等。
  • 然後使用訓練數據集來不斷的調整模型的參數(學習)。

具體怎麼做的?

  • 首先設定一個初始參數。然後開始學習,計算第一次誤差。然後調整參數,再次學習,計算誤差。以此循環。最後誤差會達到最小值。學習完畢。
    計算誤差需要用到損失函數,損失函數實際上就是根據輸出數據和預期數據計算模型的誤差的函數。我們通過損失函數得到了誤差

那麼誤差有了,如何來調參呢?

既然要調參,我們就需要根據單個參數的變化計算損失函數的變化,這不就引出了偏導的概念嗎?通過導數我們就知道了在當前點的損失函數的單調性,這樣就可以根據函數的“走勢”調整參數了。
這裏我們將所有參數的偏導組成的向量稱爲梯度(即損失函數(誤差)關於參數的偏導數向量),梯度指示的方向是各點處的損失函數值減少最多的方向,可以理解爲坡度最大的方向,但不一定會到達最低點,而是一個極小值點。

  • 只要計算出梯度,然後朝這個方向調整參數,就會使模型的誤差減小,然後重複這個過程(這種方法叫做梯度下降法)。比如下面,params就是參數數組,grad是計算好的梯度,假設grad數組中某一個grad=1,那麼說明斜率是1,函數遞增,這時從下式可得出對應的參數param = param - grad,param就會向x軸負方向移動。這時使用這個新param計算對應的函數值就減小了,到達使誤差減小的目的。其中learning rate是學習率,就是規定參數移動多少才合適。
network.params[key] -= learning_rate * grad[key]
  • 學習完畢後,用測試數據集來測試模型識別的準確率(推理)(注意這裏是計算識別精度,不是計算誤差了)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章