21個(gè)深度學(xué)習(xí)調(diào)參的實(shí)用技巧

極市導(dǎo)讀
?在學(xué)習(xí)人工智能的時(shí)候,不管是機(jī)器學(xué)習(xí)還是深度學(xué)習(xí)都需要經(jīng)歷一個(gè)調(diào)參的過程,參數(shù)的好壞直接影響著模型效果的好壞。本文總結(jié)了在深度學(xué)習(xí)中21個(gè)實(shí)用的調(diào)參的技巧,快來學(xué)習(xí)吧!?>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿
這篇文章在國外知名的網(wǎng)站?medium?上面獲得了一千多的贊,給出了很多建議,同時(shí)也備注了論文的來源,所以這么優(yōu)質(zhì)的文章,大家一定要多多宣傳哈
整理自:https://towardsdatascience.com/a-bunch-of-tips-and-tricks-for-training-deep-neural-networks-3ca24c31ddc8
1
2
如果問題域中的數(shù)據(jù)集類似于ImageNet數(shù)據(jù)集,則對(duì)該數(shù)據(jù)集使用預(yù)訓(xùn)練模型。使用最廣泛的預(yù)訓(xùn)練模型有VGG net、ResNet、DenseNet或Xception等。有許多層架構(gòu),例如,VGG(19和16層),ResNet(152, 101, 50層或更少),DenseNet(201, 169和121層)。注意:不要嘗試通過使用更多的層網(wǎng)來搜索超參數(shù)(例如VGG-19, ResNet-152或densen -201層網(wǎng)絡(luò),因?yàn)樗谟?jì)算量很大),而是使用較少的層網(wǎng)(例如VGG-16, ResNet-50或densen -121層)。選擇一個(gè)預(yù)先訓(xùn)練過的模型,你認(rèn)為它可以用你的超參數(shù)提供最好的性能(比如ResNet-50層)。在你獲得最佳超參數(shù)后,只需選擇相同但更多的層網(wǎng)(如ResNet-101或ResNet-152層),以提高準(zhǔn)確性。
ImageNet:http://www.image-net.org/challenges/LSVRC/2012/
VGG net :https://arxiv.org/abs/1409.1556
ResNet:https://arxiv.org/abs/1512.03385
DenseNet:https://arxiv.org/abs/1608.06993
Xception :https://arxiv.org/abs/1610.02357
微調(diào)幾層,或者如果你有一個(gè)小的數(shù)據(jù)集,只訓(xùn)練分類器,你也可以嘗試在你要微調(diào)的卷積層之后插入Dropout層,因?yàn)樗梢詭椭鷮?duì)抗網(wǎng)絡(luò)中的過擬合。
Dropout:http://jmlr.org/papers/v15/srivastava14a.html
如果你的數(shù)據(jù)集與ImageNet數(shù)據(jù)集不相似,你可以考慮從頭構(gòu)建并訓(xùn)練你的網(wǎng)絡(luò)。
3
BatchNormalization:https://arxiv.org/abs/1502.03167
InstanceNormalization:https://arxiv.org/abs/1607.08022
GroupNormalization:https://arxiv.org/abs/1803.08494
4
SpatialDropout:https://arxiv.org/abs/1411.4280

5
L1:https://keras.io/regularizers/
L2:https://keras.io/regularizers/
Dropout:http://jmlr.org/papers/v15/srivastava14a.html
6
from keras.constraints import max_normmodel.add(Dense(64, kernel_constraint=max_norm(2.)))model.add(Conv2D(64, kernel_constraint=max_norm(2.)))
7
8
9
Dilated Residual Networks:https://arxiv.org/abs/1705.09914
10
semantic segmentation:https://arxiv.org/abs/1802.02611
foreground segmentation:https://arxiv.org/abs/1808.01477
11
12
sklearn:http://scikit-learn.org/stable/modules/generated/sklearn.utils.class_weight.compute_class_weight.html
OverSampling and UnderSampling techniques:https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis
13

14
Learning Rate Schedulers:https://keras.io/callbacks/#learningratescheduler
15
ReduceLROnPlateau:https://keras.io/callbacks/#reducelronplateau
EarlyStopping:https://keras.io/callbacks/#earlystopping
16
skip connections:https://arxiv.org/abs/1505.04597
17
18
Google Colab:https://colab.research.google.com/notebooks/welcome.ipynb#recent=true
使用教程:https://towardsdatascience.com/a-comprehensive-guide-on-how-to-fine-tune-deep-neural-networks-using-keras-on-google-colab-free-daaaa0aced8f
Floydhub:https://www.floydhub.com
Paperspace:https://www.paperspace.com
19
在ReLU之前使用最大池化來節(jié)省一些計(jì)算。由于ReLU閾值的值為0:f(x)=max(0,x)和最大池化只有max激活:f(x)=max(x1,x2,…,xi),使用Conv > MaxPool > ReLU 而不是Conv > ReLU > MaxPool。
因此MaxPool > ReLU = max(0, max(0.5,-0.5)) = 0.5 和ReLU > MaxPool = max(max(0,0.5), max(0,-0.5)) = 0.5 看到了嗎?這兩個(gè)操作的輸出仍然是0.5。在這種情況下,使用MaxPool > ReLU可以節(jié)省一個(gè)max 操作。
20
Depthwise Separable Convolution:https://arxiv.org/abs/1610.02357
21?
深度學(xué)習(xí)調(diào)參tricks總結(jié) 萬字長文概覽深度學(xué)習(xí)的可解釋性研究 你還在手動(dòng)調(diào)參?自動(dòng)化深度學(xué)習(xí)了解一下!(CVPR2020 Tutorial)


