1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        請謹(jǐn)慎使用預(yù)訓(xùn)練的深度學(xué)習(xí)模型

        共 3839字,需瀏覽 8分鐘

         ·

        2022-06-01 11:00

        點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時間送達(dá)

        導(dǎo)讀

        預(yù)訓(xùn)練模型用起來非常容易,但是你是否忽略了可能影響模型性能的細(xì)節(jié)呢?


        你運(yùn)行過多少次下面的代碼:

        1. import torchvision.models as models

        2. inception = models.inception_v3(pretrained=True)

        或者是這個

        1. from keras.applications.inception_v3 import InceptionV3

        2. base_model = InceptionV3(weights='imagenet', include_top=False)

        看起來使用這些預(yù)訓(xùn)練的模型已經(jīng)成為行業(yè)最佳實(shí)踐的新標(biāo)準(zhǔn)。畢竟,有一個經(jīng)過大量數(shù)據(jù)和計(jì)算訓(xùn)練的模型,你為什么不利用呢?

        預(yù)訓(xùn)練模型萬歲!
        ?

        利用預(yù)訓(xùn)練的模型有幾個重要的好處:

        • 合并超級簡單

        • 快速實(shí)現(xiàn)穩(wěn)定(相同或更好)的模型性能

        • 不需要太多的標(biāo)簽數(shù)據(jù)

        • 遷移學(xué)習(xí)、預(yù)測和特征提取的通用用例

        NLP領(lǐng)域的進(jìn)步也鼓勵使用預(yù)訓(xùn)練的語言模型,如GPT和GPT-2、AllenNLP的ELMo、谷歌的BERT、Sebastian Ruder和Jeremy Howard的ULMFiT。

        利用預(yù)訓(xùn)練模型的一種常見技術(shù)是特征提取,在此過程中檢索由預(yù)訓(xùn)練模型生成的中間表示,并將這些表示用作新模型的輸入。通常假定這些最終的全連接層得到的是信息與解決新任務(wù)相關(guān)的。

        每個人都參與其中

        每一個主流框架,如Tensorflow,Keras,PyTorch,MXNet等,都提供了預(yù)先訓(xùn)練好的模型,如Inception V3,ResNet,AlexNet等,帶有權(quán)重:

        • Keras Applications

        • PyTorch torchvision.models

        • Tensorflow Official Models?(and now?TensorFlow Hubs)

        • MXNet Model Zoo

        • Fast.ai Applications

        很簡單,是不是?

        但是,這些benchmarks可以復(fù)現(xiàn)嗎?
        ?

        這篇文章的靈感來自Curtis Northcutt,他是麻省理工學(xué)院計(jì)算機(jī)科學(xué)博士研究生。他的文章‘Towards Reproducibility: Benchmarking Keras and PyTorch’ 提出了幾個有趣的觀點(diǎn)

        1. resnet結(jié)構(gòu)在PyTorch中執(zhí)行得更好,?inception結(jié)構(gòu)在Keras中執(zhí)行得更好

        2. 在Keras應(yīng)用程序上不能復(fù)現(xiàn)Keras Applications上的已發(fā)布的基準(zhǔn)測試,即使完全復(fù)制示例代碼也是如此。事實(shí)上,他們報告的準(zhǔn)確率(截至2019年2月)通常高于實(shí)際的準(zhǔn)確率。

        3. 當(dāng)部署在服務(wù)器上或與其他Keras模型按順序運(yùn)行時,一些預(yù)先訓(xùn)練好的Keras模型會產(chǎn)生不一致或較低的精度。

        4. 使用batch normalization的Keras模型可能不可靠。對于某些模型,前向傳遞計(jì)算(假定梯度為off)仍然會導(dǎo)致在推理時權(quán)重發(fā)生變化。

        你可能會想:這怎么可能?這些不是相同的模型嗎?如果在相同的條件下訓(xùn)練,它們不應(yīng)該有相同的性能嗎?

        并不是只有你這么想,Curtis的文章也在Twitter上引發(fā)了一些反應(yīng):

        關(guān)于這些差異的原因有一些有趣的見解:

        了解(并信任)這些基準(zhǔn)測試非常重要,因?yàn)樗鼈冊试S你根據(jù)要使用的框架做出明智的決策,并且通常用作研究和實(shí)現(xiàn)的基線。

        那么,當(dāng)你利用這些預(yù)先訓(xùn)練好的模型時,需要注意什么呢?

        使用預(yù)訓(xùn)練模型的注意事項(xiàng)

        1、你的任務(wù)有多相似?你的數(shù)據(jù)有多相似?

        對于你的新x射線數(shù)據(jù)集,你使用Keras Xception模型,你是不是期望0.945的驗(yàn)證精度?首先,你需要檢查你的數(shù)據(jù)與模型所訓(xùn)練的原始數(shù)據(jù)集(在本例中為ImageNet)有多相似。你還需要知道特征是從何處(網(wǎng)絡(luò)的底部、中部或頂部)遷移的,因?yàn)槿蝿?wù)相似性會影響模型性能。

        閱讀CS231n?—?Transfer Learning?and ‘How transferable are features in deep neural networks?’

        2、你如何預(yù)處理數(shù)據(jù)?

        你的模型的預(yù)處理應(yīng)該與原始模型相同。幾乎所有的torchvision模型都使用相同的預(yù)處理值。對于Keras模型,你應(yīng)該始終為相應(yīng)的模型級模塊使用 preprocess_input函數(shù)。例如:

        1. # VGG16

        2. keras.applications.vgg16.preprocess_input

        3. # InceptionV3

        4. keras.applications.inception_v3.preprocess_input

        5. #ResNet50

        6. keras.applications.resnet50.preprocess_input

        3、你的backend是什么?

        有一些關(guān)于HackerNews的傳言稱,將Keras的后端從Tensorflow更改為CNTK (Microsoft Cognitive toolkit)提高了性能。由于Keras是一個模型級庫,它不處理諸如張量積、卷積等較低級別的操作,所以它依賴于其他張量操作框架,比如TensorFlow后端和Theano后端。

        Max Woolf提供了一個優(yōu)秀的基準(zhǔn)測試項(xiàng)目,發(fā)現(xiàn)CNTK和Tensorflow之間的準(zhǔn)確性是相同的,但CNTK在LSTMs和多層感知(MLPs)方面更快,而Tensorflow在CNNs和embeddings方面更快。

        Woolf的文章是2017年發(fā)表的,所以如果能得到一個更新的比較結(jié)果,其中還包括Theano和MXNet作為后端,那將是非常有趣的(盡管Theano現(xiàn)在已經(jīng)被廢棄了)。

        還有一些人聲稱,Theano的某些版本可能會忽略你的種子。

        4、你的硬件是什么?

        你使用的是Amazon EC2 NVIDIA Tesla K80還是Google的NVIDIA Tesla P100?甚至可能是TPU???看看這些不同的pretrained模型的有用的基準(zhǔn)參考資料。

        • Apache MXNet’s?GluonNLP 0.6:Closing the Gap in Reproducible Research with BERT

        • Caleb Robinson’s ‘How to reproduce ImageNet validation results’ (and of course, again, Curtis’?benchmarking post)

        • DL Bench

        • Stanford DAWNBench

        • TensorFlow’s performance benchmarks

        5、你的學(xué)習(xí)率是什么?

        在實(shí)踐中,你應(yīng)該保持預(yù)訓(xùn)練的參數(shù)不變(即,使用預(yù)訓(xùn)練好的模型作為特征提取器),或者用一個相當(dāng)小的學(xué)習(xí)率來調(diào)整它們,以便不忘記原始模型中的所有內(nèi)容。

        6、在使用batch normalization或dropout等優(yōu)化時,特別是在訓(xùn)練模式和推理模式之間,有什么不同嗎?

        正如Curtis的帖子所說:

        使用batch normalization的Keras模型可能不可靠。對于某些模型,前向傳遞計(jì)算(假定梯度為off)仍然會導(dǎo)致在推斷時權(quán)重發(fā)生變化。

        但是為什么會這樣呢?

        Expedia的首席數(shù)據(jù)科學(xué)家Vasilis Vryniotis首先發(fā)現(xiàn)了Keras中的凍結(jié)batch normalization層的問題。

        Keras當(dāng)前實(shí)現(xiàn)的問題是,當(dāng)凍結(jié)批處理規(guī)范化(BN)層時,它在訓(xùn)練期間還是會繼續(xù)使用mini-batch的統(tǒng)計(jì)信息。我認(rèn)為當(dāng)BN被凍結(jié)時,更好的方法是使用它在訓(xùn)練中學(xué)習(xí)到的移動平均值和方差。為什么?由于同樣的原因,在凍結(jié)層時不應(yīng)該更新mini-batch的統(tǒng)計(jì)數(shù)據(jù):它可能導(dǎo)致較差的結(jié)果,因?yàn)橄乱粚記]有得到適當(dāng)?shù)挠?xùn)練。

        Vasilis還引用了這樣的例子,當(dāng)Keras模型從訓(xùn)練模式切換到測試模式時,這種差異導(dǎo)致模型性能顯著下降(從100%下降到50%)。

        好消息!?

        小白學(xué)視覺知識星球

        開始面向外開放啦??????




        下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
        在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
        小白學(xué)視覺公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

        下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
        小白學(xué)視覺公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講即可下載含有20個基于OpenCV實(shí)現(xiàn)20個實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計(jì)算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


        瀏覽 39
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日本色色网站 | 人人操人人超碰 | 可以免费看黄的网站 | 操逼大片免费看 | 中文字幕日韩一级 | 男女黄床上色视频免费的小说 | 最新亚洲黄色视频 | 欧美黄色影院 | 久久99精品国产一区二区三区 | 成人黄色在线免费观看 |