如何提升自己的實(shí)現(xiàn)idea的代碼能力
先插一句哈,之后可能會不定期在朋友圈抽獎送幾本書【因?yàn)楣娞枦]留言功能】,感興趣的朋友可以加我微信【dasounlp】圍觀朋友圈哈~~
在知乎看到一個(gè)問題:【對自己深度學(xué)習(xí)方向的論文有idea,可是工程實(shí)踐能力跟不上,實(shí)驗(yàn)搞不定怎么辦?】
這個(gè)問題其實(shí)非常常見,有些時(shí)候靈光一現(xiàn),出來個(gè)idea,但是在實(shí)現(xiàn)的時(shí)候,發(fā)現(xiàn)自己無從下手,不知如何做起;
出現(xiàn)這種情況的原因就一個(gè):
代碼看到少,寫得少;
說一個(gè)比較極端的情況,如果大家把自己這個(gè)方向的所有論文的代碼都從頭到尾搞得明明白白,清清楚楚;每一行代碼都知道在干嘛,輸入是什么形式,輸出是什么形式;
那么在實(shí)現(xiàn)idea的時(shí)候,真的是信手拈來的;
當(dāng)然,這肯定是非常的極端的情況,因?yàn)閹缀鯖]有人可能把所有論文和代碼都搞得這么透徹,時(shí)間和精力肯定是不夠的;
那么這種情況下,我們怎么做的?
我自己總結(jié)了三個(gè)步驟:
把你這個(gè)方向最基礎(chǔ)的論文【挑5篇,無上限】代碼扒下來,一步步搞清楚在做什么,然后搞一個(gè)思維導(dǎo)圖,每天晚上睡覺之前自己復(fù)述一遍,確保代碼基礎(chǔ)操作沒問題;
在1這個(gè)基礎(chǔ)之上,挑選這個(gè)方向比較前沿的方向的論文的代碼,看核心創(chuàng)新點(diǎn),看實(shí)驗(yàn)細(xì)節(jié)是怎么操作的,最重要的是去看核心創(chuàng)新點(diǎn)的代碼是怎么寫的;在這一步,去看關(guān)鍵部分的代碼就可以,然后分門別類記錄下來,比如這個(gè)論文的改進(jìn)點(diǎn)在attention,這個(gè)論文改進(jìn)點(diǎn)在增加了殘差等等,記住,把對應(yīng)的核心代碼也記錄下來;
靈光一現(xiàn),腦子中有了一個(gè)創(chuàng)新點(diǎn),在2的基礎(chǔ)上看有沒有類似的論文代碼,有的話就扒下來,魔改一下,沒有的話,依靠1的基礎(chǔ)和2的基礎(chǔ)自己寫出來;
記住,除了第一步你需要從零開始搞清楚代碼在干啥,別的時(shí)候不需要重頭復(fù)現(xiàn),太費(fèi)時(shí)間;
把上面三個(gè)步驟總結(jié)一下就是,先打好基礎(chǔ),把Pytorch/TF的各種基礎(chǔ)的操作和基礎(chǔ)模型架構(gòu)搞清楚,然后追前沿論文,搞定自己感興趣的前沿論文里面核心創(chuàng)新點(diǎn)對應(yīng)的代碼,然后依靠前兩步驟的基礎(chǔ),完成自己的idea的實(shí)現(xiàn);
在第三步中,可以依照自己idea去搜一下相關(guān)論文,看有咩有類似代碼的實(shí)現(xiàn),也是非常不錯的途徑;
這個(gè)過程中,有個(gè)非常重要的問題,就是如何學(xué)習(xí)相關(guān)代碼?
神經(jīng)網(wǎng)絡(luò)這塊的代碼一般可以分為三個(gè)部分:數(shù)據(jù)預(yù)處理,模型架構(gòu),訓(xùn)練+驗(yàn)證;
在數(shù)據(jù)預(yù)處理這塊,不同方向的預(yù)處理代碼一般都不同;自己方向的看一個(gè)比較較清晰的代碼,之后用的時(shí)候就沿用這個(gè)處理代碼就可以;
在模型架構(gòu)這塊,注意兩個(gè)東西,一個(gè)基礎(chǔ)架構(gòu)怎么寫,比如卷積怎么寫,dropout放在哪里比較好等等;另一個(gè)就是一定要注意輸入形式和輸出形式,這個(gè)非常重要。
訓(xùn)練和驗(yàn)證這塊,都是一些常規(guī)操作,比如怎么保存最好的模型,學(xué)習(xí)率和優(yōu)化器的使用等等;
總之各種騷操作,在看代碼的時(shí)候理清楚,然后隨手記下來;
代碼和學(xué)習(xí)筆記之類的東西最好是分門別類,大概是這個(gè)樣子:

一個(gè)清晰的代碼和知識筆記,就是你的武器庫,干啥都不誤。
最近超累,所以沒時(shí)間看論文,不過經(jīng)驗(yàn)文章的分享,也希望大家喜歡,比如上一個(gè)文章:如何做到極致的專注
總之,如果覺得寫的還行,求點(diǎn)贊,求在看,求轉(zhuǎn)發(fā),求一切。理科生不太會運(yùn)營,只能寄希望于大家了;
