日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【调参实战】BN和Dropout对小模型有什么影响?全局池化相比全连接有什么劣势?...

發(fā)布時(shí)間:2025/3/20 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【调参实战】BN和Dropout对小模型有什么影响?全局池化相比全连接有什么劣势?... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大家好,歡迎來(lái)到專(zhuān)欄《調(diào)參實(shí)戰(zhàn)》,雖然當(dāng)前自動(dòng)化調(diào)參研究越來(lái)越火,但那其實(shí)只是換了一些參數(shù)來(lái)調(diào),對(duì)參數(shù)的理解和調(diào)試在機(jī)器學(xué)習(xí)相關(guān)任務(wù)中是最基本的素質(zhì),在這個(gè)專(zhuān)欄中我們會(huì)帶領(lǐng)大家一步一步理解和學(xué)習(xí)調(diào)參。

本次主要講述圖像分類(lèi)項(xiàng)目中的BN層和Drouout層的調(diào)參對(duì)比實(shí)踐,以及全連接層和池化層的對(duì)比實(shí)踐

作者&編輯 | 言有三

本文資源與結(jié)果展示

本文篇幅:3000字

背景要求:會(huì)使用Python和任一深度學(xué)習(xí)開(kāi)源框架

附帶資料:Caffe代碼和數(shù)據(jù)集一份

同步平臺(tái):有三AI知識(shí)星球(一周內(nèi))

1 項(xiàng)目背景與準(zhǔn)備工作

在卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)中,早期出現(xiàn)的Dropout層可以降低模型過(guò)擬合的風(fēng)險(xiǎn),增強(qiáng)模型的泛化性能。而隨著B(niǎo)atch Normalization層的出現(xiàn),Dropout逐漸被代替,Batch Normalization層不僅可以加速模型的訓(xùn)練,還在一定程度上緩解了模擬的過(guò)擬合風(fēng)險(xiǎn)。

與之類(lèi)似,全連接層和全局池化層也是一對(duì)冤家,最早期的時(shí)候,對(duì)于分類(lèi)任務(wù)來(lái)說(shuō)網(wǎng)絡(luò)最后層都是全連接層,但是因?yàn)樗膮?shù)量巨大,導(dǎo)致后來(lái)被全局池化層替代,那替換就一定是帶來(lái)正向的結(jié)果嗎?會(huì)不會(huì)有什么副作用?

這一期我們來(lái)對(duì)以上問(wèn)題進(jìn)行實(shí)踐,本次項(xiàng)目開(kāi)發(fā)需要以下環(huán)境:

(1) Linux系統(tǒng),推薦ubuntu16.04或者ubuntu18.04。使用windows系統(tǒng)也可以完成,但是使用Linux效率更高。

(2) 最好擁有一塊顯存不低于6G的GPU顯卡,如果沒(méi)有使用CPU進(jìn)行訓(xùn)練速度較慢。

(3)?安裝好的Caffe開(kāi)源框架。

2 Dropout和BN層實(shí)踐

下面我們首先對(duì)Dropout和BN層進(jìn)行實(shí)踐,如果對(duì)這兩者的理解不熟悉的,請(qǐng)查看往期文章:

【AI初識(shí)境】深度學(xué)習(xí)模型中的Normalization,你懂了多少?

【AI初識(shí)境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?

本次的數(shù)據(jù)集和基準(zhǔn)模型與上一期內(nèi)容相同,大家如果不熟悉就去查看上一期的內(nèi)容,鏈接如下:

【調(diào)參實(shí)戰(zhàn)】如何開(kāi)始你的第一個(gè)深度學(xué)習(xí)調(diào)參任務(wù)?不妨從圖像分類(lèi)中的學(xué)習(xí)率入手。

【調(diào)參實(shí)戰(zhàn)】那些優(yōu)化方法的性能究竟如何,各自的參數(shù)應(yīng)該如何選擇?

2.1 Dropout層

首先我們給基準(zhǔn)模型添加Dropout層,它通常是被添加在網(wǎng)絡(luò)靠后的位置,我們將其添加到conv5層后面,得到的模型結(jié)構(gòu)如下:

完整的結(jié)構(gòu)配置如下:

layer {

? ?name: "data"

? ?type: "ImageData"

? ?top: "data"

? ?top: "label"

? ?include {

? ? ?phase: TRAIN

? ?}

? ?transform_param {

? ? ?mirror: true

? ? ?crop_size: 224

? ? ?mean_value: 104.0

? ? ?mean_value: 117.0

? ? ?mean_value: 124.0

? ?}

? ?image_data_param {

? ? ?source: "list_train_shuffle.txt"

? ? ?batch_size: 64

? ? ?shuffle: true

? ? ?new_height: 256

? ? ?new_width: 256

? ?}

?}

layer {

? ?name: "data"

? ?type: "ImageData"

? ?top: "data"

? ?top: "label"

? ?include {

? ? ?phase: TEST

? ?}

? ?transform_param {

? ? ?mirror: false

? ? ?crop_size: 224

? ? ?mean_value: 104.0

? ? ?mean_value: 117.0

? ? ?mean_value: 124.0

? ?}

? ?image_data_param {

? ? ?source: "list_val_shuffle.txt"

? ? ?batch_size: 64

? ? ?shuffle: false

? ? ?new_height: 224

? ? ?new_width: 224

? ?}

?}

layer {

? bottom: "data"

? top: "conv1"

? name: "conv1"

? type: "Convolution"

? param {

? ? lr_mult: 1

? ? decay_mult: 1

? }

? param {

? ? lr_mult: 2

? ? decay_mult: 0

? }

? convolution_param {

? ? num_output: 64

? ? pad: 1

? ? kernel_size: 3? ??

? ? stride: 2

? ? weight_filler {

? ? ? type: "gaussian"

? ? ? std: 0.01

? ? }

? ? bias_filler {

? ? ? type: "constant"

? ? ? value: 0

? ? }

? }

}

layer {

? bottom: "conv1"

? top: "conv1"

? name: "relu1"

? type: "ReLU"

}

layer {

? bottom: "conv1"

? top: "conv2"

? name: "conv2"

? type: "Convolution"

? param {

? ? lr_mult: 1

? ? decay_mult: 1

? }

? param {

? ? lr_mult: 2

? ? decay_mult: 0

? }

? convolution_param {

? ? num_output: 64

? ? pad: 1

? ? kernel_size: 3

? ? stride: 2

? ? weight_filler {

? ? ? type: "gaussian"

? ? ? std: 0.01

? ? }

? ? bias_filler {

? ? ? type: "constant"

? ? ? value: 0

? ? }

? }

}

layer {

? bottom: "conv2"

? top: "conv2"

? name: "relu2"

? type: "ReLU"

}

layer {

? bottom: "conv2"

? top: "conv3"

? name: "conv3"

? type: "Convolution"

? param {

? ? lr_mult: 1

? ? decay_mult: 1

? }

? param {

? ? lr_mult: 2

? ? decay_mult: 0

? }

? convolution_param {

? ? num_output: 128

? ? pad: 1

? ? kernel_size: 3

? ? stride: 2

? ? weight_filler {

? ? ? type: "gaussian"

? ? ? std: 0.01

? ? }

? ? bias_filler {

? ? ? type: "constant"

? ? ? value: 0

? ? }

? }

}

layer {

? bottom: "conv3"

? top: "conv3"

? name: "relu3"

? type: "ReLU"

}

layer {

? bottom: "conv3"

? top: "conv4"

? name: "conv4"

? type: "Convolution"

? param {

? ? lr_mult: 1

? ? decay_mult: 1

? }

? param {

? ? lr_mult: 2

? ? decay_mult: 0

? }

? convolution_param {

? ? num_output: 128

? ? pad: 1

? ? stride: 2

? ? kernel_size: 3

? ? weight_filler {

? ? ? type: "gaussian"

? ? ? std: 0.01

? ? }

? ? bias_filler {

? ? ? type: "constant"

? ? ? value: 0

? ? }

? }

}

layer {

? bottom: "conv4"

? top: "conv4"

? name: "relu4"

? type: "ReLU"

}

layer {

? bottom: "conv4"

? top: "conv5"

? name: "conv5"

? type: "Convolution"

? param {

? ? lr_mult: 1

? ? decay_mult: 1

? }

? param {

? ? lr_mult: 2

? ? decay_mult: 0

? }

? convolution_param {

? ? num_output: 256

? ? pad: 1

? ? stride: 2

? ? kernel_size: 3

? ? weight_filler {

? ? ? type: "gaussian"

? ? ? std: 0.01

? ? }

? ? bias_filler {

? ? ? type: "constant"

? ? ? value: 0

? ? }

? }

}

layer {

? bottom: "conv5"

? top: "conv5"

? name: "relu5"

? type: "ReLU"

}

layer {

? name: "drop"

? type: "Dropout"

? bottom: "conv5"

? top: "conv5"

? dropout_param {

? ? dropout_ratio: 0.5

? }

}

layer {

? ? bottom: "conv5"

? ? top: "pool5"

? ? name: "pool5"

? ? type: "Pooling"

? ? pooling_param {

? ? ? ? kernel_size: 7

? ? ? ? stride: 1

? ? ? ? pool: AVE

? ? }

}

layer {

? bottom: "pool5"

? top: "fc"

? name: "fc"

? type: "InnerProduct"

? ? inner_product_param {

? ? ? ? num_output: 20

? ? ? ? weight_filler {

? ? ? ? ? ? type: "xavier"

? ? ? ? }

? ? ? ? bias_filler {

? ? ? ? ? ? type: "constant"

? ? ? ? ? ? value: 0

? ? ? ? }

? ? }

}

layer {

? name: "accuracy_at_1"

? type: "Accuracy"

? bottom: "fc"

? bottom: "label"

? top: "accuracy_at_1"

? accuracy_param {

? ? top_k: 1

? }

}

layer {

? name: "accuracy_at_5"

? type: "Accuracy"

? bottom: "fc"

? bottom: "label"

? top: "accuracy_at_5"

? accuracy_param {

? ? top_k: 5

? }

}

layer {

? bottom: "fc"

? bottom: "label"

? top: "loss"

? name: "loss"

? type: "SoftmaxWithLoss"

}

我們?cè)囼?yàn)了兩個(gè)不同比率,即Dropout=0.5和Dropout=0.9,優(yōu)化參數(shù)配置如下:

net: "allconv6.prototxt"

test_interval:100

test_iter:15

base_lr: 0.01

lr_policy: "step"

stepsize: 10000

gamma: 0.1

momentum: 0.9

weight_decay: 0.005

display: 100

max_iter: 100000

snapshot: 10000

snapshot_prefix: "models/allconv6_"

solver_mode: GPU

其與基準(zhǔn)模型試驗(yàn)結(jié)果對(duì)比如下:

可以看出,添加Dropout之后,模型明顯要穩(wěn)定很多,但是其性能稍微有所下降,這是因?yàn)榛鶞?zhǔn)模型本身就比較小,Dropout會(huì)降低模型的容量。Dropout=0.5和Dropout=0.9時(shí)性能差不多,這都是比較常用的配置,更小的比率預(yù)期會(huì)進(jìn)一步降低模型的性能,大家可以進(jìn)行嘗試。

2.2 BN層

總結(jié)

以上是生活随笔為你收集整理的【调参实战】BN和Dropout对小模型有什么影响?全局池化相比全连接有什么劣势?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。