neuronlayer,顧名思義這裡就是神經元,啟用函式的相應層。我們知道在blob進入啟用函式之前和之後他的size是不會變的,而且啟用值也就是輸出 \(y\) 只依賴於相應的輸入 \(x\)。在caffe裡面所有的layer的實現都放在src資料夾下的layer資料夾中,基本上很多文章裡應用到的layer型別它都有cpu和cuda的實現。
在caffe裡面neuronlayer比較多,在此羅列了一下
caffe裡面的neuron種模擬較多方便人們使用,這裡我們著重關注幾個主要的neuro_layer
relulayer
目前在啟用層的函式中使用relu是非常普遍的,一般我們在看資料或者講義中總是提到的是sigmoid函式,它比sigmoid有更快的收斂性,因為sigmoid在收斂的時候越靠近目標點收斂的速度會越慢,也是其函式的曲線形狀決定的。而relulayer則相對收斂更快,具體可以看krizhevsky 12年的那篇imagenet cnn文章有更詳細的介紹。
其計算的公式是:
\[y = \max(0, x)
\]如果有負斜率式子變為:
\[y = \max(0, x) + \nu \min(0, x)
\]反向傳播的公式
\[ \frac = \left\
\nu \frac & \mathrm \; x \le 0 \\
\frac & \mathrm \; x > 0
\end \right.
\]其在cafffe中的forward和backward函式為
template void relulayer::forward_cpu(const vector*>& bottom,
const vector*>& top)
}template void relulayer::backward_cpu(const vector*>& top,
const vector& propagate_down,
const vector*>& bottom)
}}
sigmoidlayer
sigmoid函式,也稱為階躍函式,函式曲線是乙個優美的s形。目前使用sigmoid函式已經不多了,大多使用relu來代替,其對應的啟用函式為:
\[y = (1 + \exp(-x))^
\]其反向傳播時
\[\frac
= \frac y (1 - y)\]
其相應的forward和backward的函式為
template void sigmoidlayer::forward_cpu(const vector*>& bottom,
const vector*>& top)
}template void sigmoidlayer::backward_cpu(const vector*>& top,
const vector& propagate_down,
const vector*>& bottom)
}}
dropoutlayer
dropoutlayer現在是非常常用的一種網路層,只用在訓練階段,一般用在網路的全連線層中,可以減少網路的過擬合問題。其思想是在訓練過程中隨機的將一部分輸入x之置為0。
\[y_} = \left\
\frac & \mbox u > p \\
0 & \mbox
\end \right.
\]其forward_cpu和backward_cpu為:
template void dropoutlayer::forward_cpu(const vector*>& bottom,
const vector*>& top)
} else
}template void dropoutlayer::backward_cpu(const vector*>& top,
const vector& propagate_down,
const vector*>& bottom)
} else
}}
caffe原始碼解析
目錄目錄 簡單介紹 主要函式readprotofromtextfile 函式 writeprotototextfile 函式 readprotofrombinaryfile 函式 writeprototobinaryfile 函式 readimagetocvmat 函式 matchext 函式 cv...
caffe原始碼解析 一
用si載入 後 首先從caffe layer的實現看起,不同框架下最大的差異就在於層的實現也決定了層的靈活性 layer可以看成是乙個基類,下面存在data layer,activation neuron layers,vision layer,common layers,loss layer,各個...
Caffe原始碼解析5 Conv Layer
vision layer裡面主要是包括了一些關於一些視覺上的操作,比如卷積 反卷積 池化等等。這裡的類跟data layer一樣好很多種繼承關係。主要包括了這幾個類,其中cudnn分別是cuda版本,這裡先不討論,在這裡先討論convolutionlayer 其繼承自layer,是乙個卷積以及反卷積...