<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>

          深度學(xué)習(xí)項目代碼閱讀建議

          共 4055字,需瀏覽 9分鐘

           ·

          2021-09-28 02:04

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

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

          本文轉(zhuǎn)自|機器學(xué)習(xí)實驗室
               猶豫很久要不要把讀代碼這個事情專門挑出來寫成一篇推文。畢竟讀代碼嘛,大家可能都會讀。而且筆者個人讀的和寫的代碼量也并不足以到指導(dǎo)大家讀代碼的程度。但筆者還是決定大膽地寫一點:就當(dāng)是給自己設(shè)立今后讀代碼的標(biāo)準(zhǔn),也將一些之前未能踐行的方法給寫下來供大家參考。不當(dāng)之處,還請各位指教。

               搞深度學(xué)習(xí)的人,兩大必備日常除了讀論文之外就是讀代碼。讀論文筆者在第4問的時候講了閱讀路線,但如何讀用什么技巧讀每個人都有不同的見解,這里不多說。讀代碼跟讀論文、讀書多少有相似的地方,畢竟都是讀的性質(zhì)。但話又說回來,讀代碼又跟讀paper讀書大有不同,代碼是一種將論文中的模型和算法進(jìn)行實現(xiàn)的過程,是一種需要你思維時刻在線的過程。又因為我們讀的是深度學(xué)習(xí)項目代碼,不是像Linux內(nèi)核代碼那樣的鴻篇巨制,所以在代碼性質(zhì)上多少又有些不同。

               筆者這里說的一份深度學(xué)習(xí)項目代碼,小到幾百行的測試demo,大到成千萬行的開源項目,讀起來方法肯定各有不同。如下圖Mask R-CNN項目代碼和PyTorch源碼的對比:

               可以看到,Mask R-CNN作為一個經(jīng)典的實例分割框架,其代碼量可以說是中規(guī)中矩,3k的代碼量在我們讀完論文后集中花幾天時間差不多可以過一遍。但PyTorch的源碼對大多數(shù)人而言就不那么友善了,750k的代碼量,而且底層的C++代碼占到整個項目中的一半之多,作為深度學(xué)習(xí)研究而言,堪稱巨無霸級別了。這樣的代碼量,就像初學(xué)者拿到一本PRML,往往投入巨大精力后不了了之。所以,對于這兩種類型的項目代碼,閱讀方法肯定會有所區(qū)別。

               因為我們讀代碼的目的、場景和對象不盡相同,下面筆者從三個方面來和大家探討如何閱讀一份深度學(xué)習(xí)項目代碼。

               首先讀代碼的一些通用方法。這一點而言不局限于深度學(xué)習(xí)項目代碼,任何項目、任何語言的代碼閱讀都適用。我們?nèi)粘Wx代碼無非是兩個工具,一是將代碼下載到本地,打開IDLE,在IDLE里安靜的閱讀:

               第二個就是直接在GitHub的web端直接閱讀,但GitHub沒有像編輯器那樣在左側(cè)設(shè)置閱讀目錄,每次進(jìn)入一個代碼文件就必須退出來才能進(jìn)入另一個文件,用戶體驗極差。當(dāng)然了,這都不是事。chrome給我們提供了Octotree這樣的輔助閱讀插件,直接在chrome擴展程序里搜索安裝即可。

               安裝后我們就可以直接在web端就有IDLE讀代碼的體驗:

               可以看到在頁面左側(cè)有一個類似IDLE的目錄欄,大大方便了我們查看和閱讀項目代碼。這是通用方法中的工具層面,我們再來看一些基本的閱讀規(guī)矩。有了IDLE和Octotree工具,我們第一點一定是仔細(xì)看代碼目錄,對整個項目代碼結(jié)構(gòu)和分布有一個整體的認(rèn)識,對于深度學(xué)習(xí)而言通常目錄中各個模塊相對比較固定,比如是models目錄下放著模型搭建和訓(xùn)練的代碼,conifg目錄下放著模型的一些配置文件,data目錄下放著項目所使用的數(shù)據(jù)信息等等。如下面語義分割項目的目錄結(jié)構(gòu):

               對深度學(xué)習(xí)項目代碼的結(jié)構(gòu)熟絡(luò)之后,讀的多了自然就會輕車熟路起來,后面閱讀效率也就提高了。
               
               通用方法的第二個是快速找到readme文檔。通常來說,根目錄下的readme文檔包含了這份代碼的使用方法,里面有可以讓你快速了解這個項目的關(guān)鍵信息。一般來說,開源項目的readme里作者都會寫明如何使用代碼和進(jìn)行部署。下圖是DenseNet的readme文檔:

               對于大型項目,可能每一個子目錄下都有readme文檔,這都是我們需要仔細(xì)閱讀的部分,作者把關(guān)鍵信息都放里面了。所以不管這樣,第一時間讀找到readme進(jìn)行閱讀是你了解該項目的必備步驟和通用方法。
              
               第三個通用方法就是具體如何讀的問題。就是我們得確定一個閱讀主線。這一點是針對于深度學(xué)習(xí)項目代碼的通用方法,對于一個深度學(xué)習(xí)項目,我們一般想要了解的最關(guān)鍵點無非就是數(shù)據(jù)、模型和如何訓(xùn)練等幾個方面。如果你想快速看看這個開源項目的測試效果,直接讀readme看使用方法即可。如果這個項目作者提出了一個新的模型框架,比如說bert,你想了解它的模型框架細(xì)節(jié),直接定位到models目錄下的帶有model字眼的.py文件開始讀。或者是你想看這個項目是如何訓(xùn)練的,都用了哪些訓(xùn)練的tricks,它的參數(shù)初始化是如何做的,batchsize用的多大,訓(xùn)練過程中學(xué)習(xí)率如何調(diào)整的等等,那么話不多說,直接定位到帶train的.py文件即可。如下圖faster-rcnn的3個訓(xùn)練文件。

               根據(jù)目的不管是model還是train的主線,在閱讀過程中一定會涉及到其他分支,比如說數(shù)據(jù)和配置等其他分支線。在主線閱讀過程中不斷完善對分支的理解,久而久之,一個完整的項目就會被你消化了。

               以上說的是深度學(xué)習(xí)項目代碼閱讀的一些通用方法。下面再具體講兩個場景的代碼閱讀。畢竟大家做事講究目的性,往往帶有較強的目的性去做某事效率一般會特別高。

               第一個場景是在大家做研究做項目時遇到問題時。不知道這個問題如何解決,直接谷歌又找不到好合適的方法的時候。這時候我們可能會寄希望于在GitHub上搜羅一番。比如說我們想要知道對于極度數(shù)據(jù)不平衡時如何給損失函數(shù)加權(quán)重的方法,再比如對于多標(biāo)簽問題進(jìn)行模型預(yù)測時如何找到最佳分類閾值等等。這些問題都是我們在做實際項目時都可能會碰上的,在這種情況下若是能在GitHub上找到類似場景的處理方法,相信你會瞬間來了精神。

              下述基于keras的CNN多標(biāo)簽分類項目對于多標(biāo)簽分類閾值尋優(yōu)使用了matthews_corrcoef來確定最佳分類預(yù)測閾值。至于什么是matthews_corrcoef,這些都是你在解決問題過程中需要學(xué)習(xí)和吸收的地方。總之,帶有目的性的讀某個項目的代碼往往是只讀某個block甚至是某幾個關(guān)鍵行,數(shù)量不在多,在于能夠解決你的問題。


               第二個場景就是為了自我個人精進(jìn)的讀代碼。所謂個人精進(jìn),就是有大量可支配的個人學(xué)習(xí)和研究時間,高度的自律性和超強的學(xué)習(xí)力的人進(jìn)行能力躍遷的關(guān)鍵所在。筆者雖然平時偶爾會有去GitHub讀一些代碼,但說要達(dá)到個人精進(jìn)的level,還遠(yuǎn)遠(yuǎn)不夠。比如說前面的PyTorch 750k的源碼,這么大的代碼量,閱讀策略一定是分治思想,分散包圍和各個擊破。把項目進(jìn)行分解,設(shè)定閱讀計劃和目標(biāo),在超強的執(zhí)行力下還是有可能完成的。這不是普通人干的事,但我相信能在深度學(xué)習(xí)領(lǐng)域精進(jìn)的人都不會是普通人。


               誠然,無論是讀教材、讀論文還是本篇所說的讀代碼,這些本身都是一個個人學(xué)習(xí)能力提升和知識汲取的過程。對于從事深度學(xué)習(xí)工作的我們而言,arxiv上的論文和GitHub上的代碼都無窮盡,關(guān)鍵在于保持學(xué)習(xí)的勁頭,做一名終身學(xué)習(xí)者。


          參考資料:

          https://zhuanlan.zhihu.com/p/26222486


          好消息,小白學(xué)視覺團隊的知識星球開通啦,為了感謝大家的支持與厚愛,團隊決定將價值149元的知識星球現(xiàn)時免費加入。各位小伙伴們要抓住機會哦!


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

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

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

          交流群


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


          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  亚洲AV成人无码网天堂 | 尤物最新网址 | www.狠狠爱 | 午夜视频入口 | 欧美国产免费A视频 |