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

          寫代碼復現(xiàn)論文的幾點建議!

          共 1724字,需瀏覽 4分鐘

           ·

          2022-06-13 00:12

          不知道大家有時候會不會有一個很好的idea,但是就是寫不出來具體的代碼,或者寫的代碼不夠高效。

          其實這種情況所有人都會遇到:

          • 場景1:比賽期間有一個新特征的方法,但是用pandas實現(xiàn)太慢,時間復雜度太高。
          • 場景2:科研或工作遇到一個新問題,進入一個新領域,不知道如何開始。
          • 場景3:復現(xiàn)別人的深度學習論文,但就是沒法成功。

          場景1:代碼太慢

          現(xiàn)在不管是比賽還是常見的數(shù)據(jù)處理,都會遇到大規(guī)模的文件。此時如果你代碼寫的不夠高效,代碼肯定會運行的很慢很慢,基本上沒法滿足要求。

          步驟1:寫出基礎代碼

          使用少量數(shù)據(jù)集來實踐你的思路,代碼可以不用很優(yōu)化,優(yōu)先寫出來即可。寫完后建議封裝為函數(shù),方便調用。

          步驟2:優(yōu)化代碼邏輯

          在不斷增加數(shù)據(jù)量的過程中,你會發(fā)現(xiàn)代碼越來越慢,逐漸達到你的預期上限。此時你應該嘗試去優(yōu)化你的代碼了。

          優(yōu)化代碼有一些基礎的邏輯:

          1. 代碼本身足夠高效嗎?
          2. 代碼是否利用了所有的CPU/GPU?

          例如在使用Pandas時,如果不了解具體的語法,很容易將代碼寫成for循環(huán),可以參考以下優(yōu)化過程。

          • 下標循環(huán)
          df1 = df
          for i in range(len(df)):
              if df.iloc[i]['test'] != 1:
                  df1.iloc[i]['test'] = 0
          • Iterrows循環(huán)
          i = 0
          for ind, row in df.iterrows():
              if row['test'] != 1:
                  df1.iloc[i]['test'] = 0
              i += 1
          • Apply循環(huán)
          df1['test'] = df['test'].apply(lambda x: x if x == 1 else 0)
          • 內置函數(shù)
          res = df.sum()
          • Numpy函數(shù)
          df_values = df.values
          res = np.sum(df_values)

          步驟3:提高資源利用率

          當你逐步對Pandas和Numpy的熟悉過程中,你會發(fā)現(xiàn)自己的代碼也運行的越來越快。如果最終代碼都是用內置函數(shù)實現(xiàn),基本上已經很好了。

          但也可以進一步優(yōu)化,因為Pandas很多操作都是串行單線程執(zhí)行,所以可以手動開多線程進一步加速數(shù)據(jù)的計算過程,把所有CPU用上,或使用cuDF利用GPU加速。

          場景2:新領域無從下手

          閱讀已有新工作的必經之路,所以努力要站在巨人的肩膀上。

          1. 閱讀目標領域內近3-5年頂會論文,特別是綜述論文。
          2. 收集公開賽事或榜單上學習Top名次的解決方案,包含思路和代碼。

          無他唯孰能爾,多收集多整理,理解領域思路和套路。

          場景3:復現(xiàn)別人的論文

          科研并不是從0到1,一定要多去了解已有的工作,以及已有的論文代碼。在閱讀完論文代碼后,可以按照如下步驟逐步復現(xiàn):

          步驟1:找到有開源代碼的論文

          在Github上找到歷史的有代碼的論文,這些論文項目雖然比較舊,但參考價值很大。

          步驟2:整理好數(shù)據(jù)集的加載

          搞清楚數(shù)據(jù)集怎么制作怎么加載怎么輸入怎么計算怎么輸出,數(shù)據(jù)集如何處理,如何編碼。

          步驟3:搭建論文模型

          基于論文思路整理好模型結構,有多少層,每層的細節(jié),每層的維度,一步一步搭建。保證模型可以正常訓練和預測。

          步驟4:確定訓練細節(jié)

          根據(jù)論文實驗部分的細節(jié),確定具體的batch、epoch、學習率和優(yōu)化器,確定訓練的流程沒有問題。

          整理不易,三連

          瀏覽 61
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  三及片久久久 | 狠狠操 五月天 | 国产成人在线观看免费网站 | 无码18p| 东京热久久综合 |