<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 5784字,需瀏覽 12分鐘

           ·

          2020-10-29 02:40

          ↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)

          者丨AI_study
          源丨AI算法與圖像處理
          編輯丨極市平臺(tái)

          極市導(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ì)的文章,大家一定要多多宣傳哈


          訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)是困難的。它需要知識(shí)和經(jīng)驗(yàn),以適當(dāng)?shù)挠?xùn)練和獲得一個(gè)最優(yōu)模型。在這篇文章中,我想分享我在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時(shí)學(xué)到的東西。以下提示和技巧可能對(duì)你的研究有益,并可以幫助你加速網(wǎng)絡(luò)架構(gòu)或參數(shù)搜索。
          現(xiàn)在,讓我們開始吧……
          整理自:https://towardsdatascience.com/a-bunch-of-tips-and-tricks-for-training-deep-neural-networks-3ca24c31ddc8


          1

          在你開始建立你的網(wǎng)絡(luò)體系結(jié)構(gòu),你需要做的第一件事是驗(yàn)證輸入到網(wǎng)絡(luò)的數(shù)據(jù),確保輸入(x)對(duì)應(yīng)于一個(gè)標(biāo)簽(y)。在預(yù)測(cè)的情況下,確保真實(shí)標(biāo)簽(y)正確編碼標(biāo)簽索引(或者one-hot-encoding)。否則,訓(xùn)練就不起作用。


          2

          決定是選擇使用預(yù)模型還是從頭開始訓(xùn)練你的網(wǎng)絡(luò)?
          • 如果問題域中的數(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

          在你的網(wǎng)絡(luò)中始終使用歸一化層(normalization layers)。如果你使用較大的批處理大小(比如10個(gè)或更多)來訓(xùn)練網(wǎng)絡(luò),請(qǐng)使用批標(biāo)準(zhǔn)化層(BatchNormalization)。否則,如果你使用較小的批大小(比如1)進(jìn)行訓(xùn)練,則使用InstanceNormalization層。請(qǐng)注意,大部分作者發(fā)現(xiàn),如果增加批處理大小,那么批處理規(guī)范化會(huì)提高性能,而當(dāng)批處理大小較小時(shí),則會(huì)降低性能。但是,如果使用較小的批處理大小,InstanceNormalization會(huì)略微提高性能。或者你也可以嘗試組規(guī)范化(GroupNormalization)。


          BatchNormalization:https://arxiv.org/abs/1502.03167

          InstanceNormalization:https://arxiv.org/abs/1607.08022

          GroupNormalization:https://arxiv.org/abs/1803.08494


          4

          如果你有兩個(gè)或更多的卷積層(比如Li)對(duì)相同的輸入(比如F)進(jìn)行操作(參考下面的示意圖理解),那么在特征連接后使用SpatialDropout。由于這些卷積層是在相同的輸入上操作的,因此輸出特征很可能是相關(guān)的。因此,SpatialDropout刪除了那些相關(guān)的特征,并防止網(wǎng)絡(luò)中的過擬合。


          注意:?它主要用于較低的層而不是較高的層。


          SpatialDropout:https://arxiv.org/abs/1411.4280


          5

          為了確定你的網(wǎng)絡(luò)容量,嘗試用一小部分訓(xùn)練例子來超載你的網(wǎng)絡(luò)(andrej karpathy的提示)。如果它沒有超載,增加你的網(wǎng)絡(luò)容量。在過擬合后,使用正則化技巧如L1、L2、Dropout或其他技術(shù)來對(duì)抗過擬合。

          L1:https://keras.io/regularizers/

          L2:https://keras.io/regularizers/

          Dropout:http://jmlr.org/papers/v15/srivastava14a.html


          6

          另一種正則化技術(shù)是約束或限制你的網(wǎng)絡(luò)權(quán)值。這也有助于防止網(wǎng)絡(luò)中的梯度爆炸問題,因?yàn)闄?quán)值總是有界的。與L2正則化相反,在你的損失函數(shù)中懲罰高權(quán)重,這個(gè)約束直接正則化你的權(quán)重。你可以在Keras中輕松設(shè)置權(quán)重約束:

          from keras.constraints import max_norm# add to Dense layersmodel.add(Dense(64, kernel_constraint=max_norm(2.)))# or add to Conv layersmodel.add(Conv2D(64, kernel_constraint=max_norm(2.)))

          7

          對(duì)數(shù)據(jù)進(jìn)行均值減法有時(shí)會(huì)產(chǎn)生非常糟糕的效果,特別是對(duì)灰度圖像進(jìn)行減法(我個(gè)人在前景分割領(lǐng)域就遇到過這個(gè)問題)。


          8

          訓(xùn)練前和訓(xùn)練期間,確保打亂訓(xùn)練數(shù)據(jù),以防你不能從時(shí)序數(shù)據(jù)中獲取有用信息。這可能有助于提高您的網(wǎng)絡(luò)性能。


          9

          如果你的問題域與稠密預(yù)測(cè)(dense prediction)相關(guān)(如語義分割),我建議你使用膨脹殘差網(wǎng)絡(luò)作為預(yù)訓(xùn)練模型,因?yàn)樗钸m合稠密預(yù)測(cè)。

          Dilated Residual Networks:https://arxiv.org/abs/1705.09914


          10

          要捕獲對(duì)象周圍的上下文信息,可以使用多尺度特性的池化模塊。該思想成功地應(yīng)用于語義分割或前景分割中。

          semantic segmentation:https://arxiv.org/abs/1802.02611

          foreground segmentation:https://arxiv.org/abs/1808.01477


          11

          Opt-out void labels(或模糊區(qū)域)從您的損失或精度計(jì)算,如果有。這可以幫助你的網(wǎng)絡(luò)在預(yù)測(cè)時(shí)更有信心。

          12

          如果你有高度不平衡的數(shù)據(jù)問題,在訓(xùn)練期間應(yīng)用類別加權(quán)操作。換句話說,給稀少的類更多的權(quán)重,但給主要類更少的權(quán)重。使用sklearn可以很容易地計(jì)算類權(quán)重。或者嘗試使用過采樣和欠采樣技術(shù)重新采樣你的訓(xùn)練集。這也可以幫助提高預(yù)測(cè)的準(zhǔn)確性。

          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

          選擇一個(gè)正確的優(yōu)化器。有許多流行的自適應(yīng)優(yōu)化器,如Adam, Adagrad, Adadelta,或RMSprop等。SGD+動(dòng)量被廣泛應(yīng)用于各種問題領(lǐng)域。有兩件事需要考慮:

          第一,如果你關(guān)心快速收斂,使用自適應(yīng)優(yōu)化器,如Adam,但它可能會(huì)陷入局部極小,提供了糟糕的泛化(下圖)。

          第二,SGD+momentum可以實(shí)現(xiàn)找到全局最小值,但它依賴于魯棒初始化,而且可能比其他自適應(yīng)優(yōu)化器需要更長的時(shí)間來收斂(下圖)。我建議你使用SGD+動(dòng)量,因?yàn)樗苓_(dá)到更好的最佳效果。


          14

          有三個(gè)學(xué)習(xí)率起點(diǎn)(即1e- 1,1e -3和1e-6)。如果您對(duì)預(yù)訓(xùn)練模型進(jìn)行微調(diào),請(qǐng)考慮小于1e-3(比如1e-4)的低學(xué)習(xí)率。如果您從頭開始訓(xùn)練您的網(wǎng)絡(luò),請(qǐng)考慮一個(gè)大于或等于1e-3的學(xué)習(xí)率。您可以嘗試這些起點(diǎn),并調(diào)整它們,看看哪個(gè)是最好的,選擇那個(gè)。還有一件事,您可以考慮通過使用 Learning Rate Schedulers來降低訓(xùn)練過程中的學(xué)習(xí)率。這也可以幫助提高網(wǎng)絡(luò)性能。

          Learning Rate Schedulers:https://keras.io/callbacks/#learningratescheduler


          15

          除了Learning Rate Schedule 外,即在一定的次數(shù)后降低學(xué)習(xí)率,還有另一種方式,我們可以由一些因素減少學(xué)習(xí)率,如果驗(yàn)證損loss在某些epoch(比如5)停止改善,減小學(xué)習(xí)率和如果驗(yàn)證損失停止改善在某些epoch(比如10),停止訓(xùn)練過程。這可以通過在Keras中使用early stop的ReduceLROnPlateau很容易做到。

          ReduceLROnPlateau:https://keras.io/callbacks/#reducelronplateau

          EarlyStopping:https://keras.io/callbacks/#earlystopping


          16

          果您在dense prediction領(lǐng)域工作,如前景分割或語義分割,您應(yīng)該使用跳過連接,因?yàn)閷?duì)象邊界或有用的信息會(huì)由于最大池化操作或strided convolutions而丟失。這也可以幫助您的網(wǎng)絡(luò)輕松地學(xué)習(xí)特征空間到圖像空間的特征映射,有助于緩解網(wǎng)絡(luò)中的消失梯度問題。

          skip connections:https://arxiv.org/abs/1505.04597


          17

          數(shù)據(jù)越多越好!總是使用數(shù)據(jù)增強(qiáng),如水平翻轉(zhuǎn),旋轉(zhuǎn),縮放裁剪等。這可以幫助大幅度提高精確度。



          18

          你必須要有一個(gè)高速的GPU來進(jìn)行訓(xùn)練,但是這有點(diǎn)昂貴。如果你想使用免費(fèi)的云GPU,我推薦使用谷歌Colab。如果你不知道從哪里開始,看看我之前的文章或者嘗試各種云GPU平臺(tái),如Floydhub或Paperspace等。

          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。


          例如,假設(shè)我們有兩個(gè)從Conv來的激活值(即0.5和-0.5):

          • 因此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

          考慮采用深度可分離卷積運(yùn)算,與常規(guī)的卷積運(yùn)算相比,該運(yùn)算速度快,且參數(shù)數(shù)量大大減少。

          Depthwise Separable Convolution:https://arxiv.org/abs/1610.02357


          21?

          最后但并非最不重要的是不要放棄。相信自己,你能做到!如果你還沒有得到高精度,調(diào)整你的hyper-parameters,網(wǎng)絡(luò)體系結(jié)構(gòu)或訓(xùn)練數(shù)據(jù),直到你得到你正在尋找的準(zhǔn)確性。


          推薦閱讀



          【極市1024開發(fā)者節(jié)】
          京東卡、算力棒、雙肩包、20本CV電子書籍(人人有份),掃碼查看

          添加極市小助手微信(ID : cvmart2),備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳),即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群:月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動(dòng)交流~

          △長按添加極市小助手

          △長按關(guān)注極市平臺(tái),獲取最新CV干貨

          覺得有用麻煩給個(gè)在看啦~??
          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  水蜜桃一曲二区 | 国产精品九九九九。。。 | 欧美国产大屌操疼 | 黄色小说片五月 | 学生妹做爱视频 |