Caffe卷積神經(jīng)網(wǎng)絡(luò)視覺(jué)層Vision?Layers及參數(shù)詳解
引言
所有的層都具有的參數(shù),如name, type, bottom, top和transform_param請(qǐng)參看我的前一篇文章:Caffe卷積神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)層及參數(shù)
本文只講解視覺(jué)層(Vision Layers)的參數(shù),視覺(jué)層包括Convolution, Pooling,Local Response Normalization (LRN), im2col等層。
1、Convolution層:
就是卷積層,是卷積神經(jīng)網(wǎng)絡(luò)(CNN)的核心層。
層類(lèi)型:Convolution
lr_mult: 學(xué)習(xí)率的系數(shù),最終的學(xué)習(xí)率是這個(gè)數(shù)乘以solver.prototxt配置文件中的base_lr。
如果有兩個(gè)lr_mult, 則第一個(gè)表示權(quán)值的學(xué)習(xí)率,第二個(gè)表示偏置項(xiàng)的學(xué)習(xí)率。一般偏置項(xiàng)的學(xué)習(xí)率是權(quán)值學(xué)習(xí)率的兩倍。
在后面的convolution_param中,我們可以設(shè)定卷積層的特有參數(shù)。
必須設(shè)置的參數(shù):
- num_output: 卷積核(filter)的個(gè)數(shù)
- kernel_size: 卷積核的大小。如果卷積核的長(zhǎng)和寬不等,需要用kernel_h和kernel_w分別設(shè)定
其它參數(shù):
- stride: 卷積核的步長(zhǎng),默認(rèn)為1。也可以用stride_h和stride_w來(lái)設(shè)置。
- pad: 擴(kuò)充邊緣,默認(rèn)為0,不擴(kuò)充。 擴(kuò)充的時(shí)候是左右、上下對(duì)稱(chēng)的,比如卷積核的大小為5*5,那么pad設(shè)置為2,則四個(gè)邊緣都擴(kuò)充2個(gè)像素,即寬度和高度都擴(kuò)充了4個(gè)像素,這樣卷積運(yùn)算之后的特征圖就不會(huì)變小。也可以通過(guò)pad_h和pad_w來(lái)分別設(shè)定。
- weight_filler: 權(quán)值初始化。 默認(rèn)為“constant",值全為0,很多時(shí)候我們用"xavier"算法來(lái)進(jìn)行初始化,也可以設(shè)置為”gaussian"
- bias_filler: 偏置項(xiàng)的初始化。一般設(shè)置為"constant",值全為0。
- bias_term: 是否開(kāi)啟偏置項(xiàng),默認(rèn)為true, 開(kāi)啟
group: 分組,默認(rèn)為1組。如果大于1,我們限制卷積的連接操作在一個(gè)子集內(nèi)。如果我們根據(jù)圖像的通道來(lái)分組,那么第i個(gè)輸出分組只能與第i個(gè)輸入分組進(jìn)行連接。
如果設(shè)置stride為1,前后兩次卷積部分存在重疊。如果設(shè)置pad=(kernel_size-1)/2,則運(yùn)算后,寬度和高度不變。
示例:
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 20 kernel_size: 5 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } } }
2、Pooling層
也叫池化層,為了減少運(yùn)算量和數(shù)據(jù)維度而設(shè)置的一種層。
層類(lèi)型:Pooling
必須設(shè)置的參數(shù):
kernel_size: 池化的核大小。也可以用kernel_h和kernel_w分別設(shè)定。
其它參數(shù):
- pool: 池化方法,默認(rèn)為MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC
- pad: 和卷積層的pad的一樣,進(jìn)行邊緣擴(kuò)充。默認(rèn)為0
- stride: 池化的步長(zhǎng),默認(rèn)為1。一般我們?cè)O(shè)置為2,即不重疊。也可以用stride_h和stride_w來(lái)設(shè)置。
示例:
layer { name: "pool1" type: "Pooling" bottom: "conv1" top: "pool1" pooling_param { pool: MAX kernel_size: 3 stride: 2 } }
pooling層的運(yùn)算方法基本是和卷積層是一樣的。
如果設(shè)置stride為2,前后兩次卷積部分不重疊。100*100的特征圖池化后,變成50*50.
3、Local Response Normalization (LRN)層
此層是對(duì)一個(gè)輸入的局部區(qū)域進(jìn)行歸一化,達(dá)到“側(cè)抑制”的效果。可去搜索AlexNet或GoogLenet,里面就用到了這個(gè)功能
層類(lèi)型:LRN
參數(shù):全部為可選,沒(méi)有必須
- local_size: 默認(rèn)為5。如果是跨通道LRN,則表示求和的通道數(shù);如果是在通道內(nèi)LRN,則表示求和的正方形區(qū)域長(zhǎng)度。
- alpha: 默認(rèn)為1,歸一化公式中的參數(shù)。
- beta: 默認(rèn)為5,歸一化公式中的參數(shù)。
- norm_region: 默認(rèn)為ACROSS_CHANNELS。有兩個(gè)選擇,ACROSS_CHANNELS表示在相鄰的通道間求和歸一化。WITHIN_CHANNEL表示在一個(gè)通道內(nèi)部特定的區(qū)域內(nèi)進(jìn)行求和歸一化。與前面的local_size參數(shù)對(duì)應(yīng)。
歸一化公式:對(duì)于每一個(gè)輸入, 去除以
得到歸一化后的輸出
示例:
layers { name: "norm1" type: LRN bottom: "pool1" top: "norm1" lrn_param { local_size: 5 alpha: 0.0001 beta: 0.75 } }
4、im2col層
如果對(duì)matlab比較熟悉的話(huà),就應(yīng)該知道im2col是什么意思。它先將一個(gè)大矩陣,重疊地劃分為多個(gè)子矩陣,對(duì)每個(gè)子矩陣序列化成向量,最后得到另外一個(gè)矩陣。
看一看圖就知道了:
在caffe中,卷積運(yùn)算就是先對(duì)數(shù)據(jù)進(jìn)行im2col操作,再進(jìn)行內(nèi)積運(yùn)算(inner product)。這樣做,比原始的卷積操作速度更快。
看看兩種卷積操作的異同:
以上就是Caffe卷積神經(jīng)網(wǎng)絡(luò)視覺(jué)層Vision Layers及參數(shù)詳解的詳細(xì)內(nèi)容,更多關(guān)于Caffe視覺(jué)層Vision Layers的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Caffe卷積神經(jīng)網(wǎng)絡(luò)solver及其配置詳解
- Caffe卷積神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)層及參數(shù)
- Pytorch卷積神經(jīng)網(wǎng)絡(luò)遷移學(xué)習(xí)的目標(biāo)及好處
- Pytorch深度學(xué)習(xí)經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)resnet模塊訓(xùn)練
- Pytorch卷積神經(jīng)網(wǎng)絡(luò)resent網(wǎng)絡(luò)實(shí)踐
- python機(jī)器學(xué)習(xí)GCN圖卷積神經(jīng)網(wǎng)絡(luò)原理解析
- PyTorch實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的搭建詳解
- 卷積神經(jīng)網(wǎng)絡(luò)CharCNN實(shí)現(xiàn)中文情感分類(lèi)任務(wù)
相關(guān)文章
Python實(shí)現(xiàn)在一行中交換兩個(gè)變量
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)在一行中交換兩個(gè)變量功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08python opencv實(shí)現(xiàn)圖像矯正功能
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)圖像矯正功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08pytorch如何對(duì)image和label同時(shí)進(jìn)行隨機(jī)翻轉(zhuǎn)
這篇文章主要介紹了pytorch如何對(duì)image和label同時(shí)進(jìn)行隨機(jī)翻轉(zhuǎn)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python設(shè)計(jì)密碼強(qiáng)度校驗(yàn)程序
這篇文章主要介紹了Python如何設(shè)計(jì)密碼強(qiáng)度校驗(yàn)程序,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07Python中Playwright?與?pyunit?結(jié)合使用詳解
這篇文章主要介紹了Python中Playwright?與?pyunit?結(jié)合使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03