場景1:代碼太慢
1:寫出基礎代碼
- 使用少量數據集來實踐你的思路,代碼可以不用很優化,優先寫出來即可。寫完后建議封裝為函數,方便調用。
2:優化代碼邏輯
- 代碼本身足夠高效嗎?
- 代碼是否利用了所有的CPU/GPU?
- 常用優化過程
下標循環
df1 = df
for i in range(len(df)):
if df.iloc[i]['test'] != 1:
df1.iloc[i]['test'] = 0
Iterrows循環
i = 0
for ind, row in df.iterrows():
if row['test'] != 1:
df1.iloc[i]['test'] = 0
i += 1
Apply循環
df1['test'] = df['test'].apply(lambda x: x if x == 1 else 0)
內置函數
res = df.sum()
Numpy函數
df_values = df.values
res = np.sum(df_values)
3:提高資源利用率
- 當逐步對Pandas和Numpy的熟悉過程中,會發現自己的代碼也運行的越來越快。如果最終代碼都是用內置函數實現,基本上已經很好了。
- 但也可以進一步優化,因為Pandas很多操作都是串行單線程執行,所以可以手動開多線程進一步加速數據的計算過程,把所有CPU用上,或使用cuDF利用GPU加速。
場景2:新領域無從下手
- 閱讀目標領域內近3-5年頂會論文,特別是綜述論文。
- 收集公開賽事或榜單上學習Top名次的解決方案,包含思路和代碼。
場景3:復現別人的論文
1:找到有開源代碼的論文
- 在Github上找到歷史的有代碼的論文,這些論文項目雖然比較舊,但參考價值很大。
2:整理好數據集的加載
- 搞清楚數據集怎么制作怎么加載怎么輸入怎么計算怎么輸出,數據集如何處理,如何編碼。
3:搭建論文模型
- 基於論文思路整理好模型結構,有多少層,每層的細節,每層的維度,一步一步搭建。保證模型可以正常訓練和預測。
4:確定訓練細節
- 根據論文實驗部分的細節,確定具體的batch、epoch、學習率和優化器,確定訓練的流程沒有問題。