目錄
回答一
使用Yaml檔案來設定訓練參數
程式碼模組化非常重要
Tensorboard, tqdm用起來
充分利用Github
記錄實驗結果
回答二
1. 試驗參數盡量使用config檔傳入,並且config盡量與log檔同名儲存。
2. 盡量讓不同的模型之間解耦
3. 在滿足一定穩定性的同時,定期跟進新版的框架
4. 一次訓練的時間挺長的,coding結束不要盲目的就開始跑實驗,個人經驗提供debug模式來實驗小數據 更多的log是個不錯的選擇。
5. 記錄好隨著模型update performance的變化,因為可能隨時需要退回去重來。
Tensorboard 記錄實驗數據:
設定檔:
TensorBoard 數據視覺化效果
WandB 記錄實驗數據
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='WandbLoggerHook') ])
登入後複製
" >
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='WandbLoggerHook') ])
登入後複製
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='NeptuneLoggerHook',  init_kwargs=dict(project='Your Neptume account/mmcv')) ])
登入後複製
" >
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='NeptuneLoggerHook',  init_kwargs=dict(project='Your Neptume account/mmcv')) ])
登入後複製
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='MlflowLoggerHook') ])
登入後複製
" >
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='MlflowLoggerHook') ])
登入後複製
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='DvcliveLoggerHook') ])
登入後複製
" >
log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='DvcliveLoggerHook') ])
登入後複製
首頁 科技週邊 人工智慧 深度學習科研,如何有效率地進行程式碼和實驗管理?

深度學習科研,如何有效率地進行程式碼和實驗管理?

Oct 23, 2023 am 11:21 AM
自動駕駛 深度學習

回答一

作者:葉小飛 
連結:https://www.zhihu.com/question/269707221/answer/2281374258

我之前在北美賓士落地時,曾有一段時間為了測試不同的結構和參數,一周能訓練一百來個不同的模型,為此我結合公司前輩們的做法和自己的一點思考總結了一套高效的程式碼實驗管理方法,成功幫助了專案落地, 現在在這裡分享給大家。

使用Yaml檔案來設定訓練參數

我知道很多開源repo喜歡用input argparse來傳輸一大堆訓練和模型相關的參數,其實非常不高效。一方面,你每次訓練都需要手動輸入大量參數會很麻煩,如果直接改預設值又要跑到程式碼裡去改,會浪費很多時間。這裡我推薦大家直接使用一個Yaml file來控制所有模型和訓練相關的參數,並將該yaml的命名與模型名字和時間戳聯繫起來,著名的3d點雲檢測庫OpenPCDet就是這麼做的,如下方這個連結所示。

github.com/open-mmlab/OpenPCDet/blob/master/tools/cfgs/kitti_models/pointrcnn.yaml

我從上方給的連結截取了該yaml檔案部分內容,如下圖所示,這個設定檔涵蓋如何預處理點雲,classification的種類,還有backbone各方面的參數、optimzer和loss的選擇(圖中未展示,完整請看上方連結)。也就是說,基本上所有能影響你模型的因素,都被涵括在了這個檔案裡,而在程式碼中,你只需要用一個簡單的yaml.load()就能把這些參數全部讀到一個dict。更關鍵的是,這個設定檔可以隨著你的checkpoint一起被存到相同的資料夾,方便你直接拿來做斷點訓練、finetune或直接做測試,用來做測試時你也可以很方便把結果和對應的參數對上。

深度學習科研,如何有效率地進行程式碼和實驗管理?

程式碼模組化非常重要

有些研究人員寫程式碼時喜歡把整個系統寫的過於耦合,例如把loss function和模型寫在一起,這會常常導致牽一發而動全身,你改動某一小塊就會導致後面的介面也全變,所以程式碼模組化做的好,可以節省你許多時間。一般的深度學習程式碼基本上可以分為這麼幾大塊(以pytorch為例):I/O模組、預處理模組、視覺化模組、模型主體(如果一個大模型包含子模型則應該另起class)、損失函數、後處理,並在訓練或測試腳本裡串聯起來。程式碼模組化的另一個好處,就是方便你在yaml裡去定義不同方面的參數,方便閱覽。另外很多成熟程式碼裡都會用到importlib神庫,它可以允許你不把訓練時用哪個模型或哪個子模型在程式碼裡定死,而是可以直接在yaml裡定義。

Tensorboard, tqdm用起來

這兩個函式庫我基本上每次必用。 Tensorboard可以很好的追蹤你訓練的loss曲線變化,方便你判斷模型是否還在收斂、是否overfit,如果你是做圖像相關,還可以把一些視覺化結果放在上面。很多時候你只需要看看tensorboard的收斂狀態就基本知道你這個模型怎麼樣,有沒有必要花時間再單獨測試、finetune. Tqdm則可以幫你很直觀地跟踪你的訓練進度,方便你做early stop .

充分利用Github

無論你是多人合作開發還是單獨項目,我都強烈建議使用Github(公司可能會使用bitbucket, 差不多)記錄你的程式碼。具體可以參考我這篇回答:

身為研究生,有哪些你直呼好用的科研神器?
https://www.zhihu.com/question/484596211/answer/2163122684

記錄實驗結果

我通常會保存一個總的excel來記錄實驗結果,第一列是模型對應的yaml的路徑,第二列是模型訓練epoches, 第三列是測試結果的log, 我一般會把這個過程自動化,只要在測試腳本中給定總excel路徑,利用pandas可以很輕鬆地搞定。

回答二

作者:Jason  
連結:https://www.zhihu.com/question/269707221/answer/470576066

git管理程式碼是跟深度學習、科學研究都沒關係的,寫程式碼一定要用版本管理工具。用不用github個人覺著倒是兩可,畢竟公司內是不可能所有程式碼都掛外部git的。

那麼說幾個寫程式碼的時候需要注意的地方吧:

1. 試驗參數盡量使用config檔傳入,並且config盡量與log檔同名儲存。

一方面外部傳入參數可以避免git上過多的版本修改是由於參數導致的,介於DL不好debug,有時候利用git做一下程式碼比對是在所難免的;

另一方面當試驗了萬千版本之後,相信你不會知道哪個model是哪些參數了,好的習慣是非常有效的。另外新加的參數盡量提供default值,方便呼叫老版的config檔。

2. 盡量讓不同的模型之間解耦

同一個項目裡,好的複用性是編程的一種非常好的習慣,但是在飛速發展的DL coding中,假設項目是以任務驅動的,這也許有時候會成為牽絆,所以盡量把可重複使用的一些函數提取出來,模型結構相關的盡量讓不同的模型解耦在不同的文件中,反而會更方便日後的update。否則一些看似優美的設計幾個月後就變得很雞肋。

3. 在滿足一定穩定性的同時,定期跟進新版的框架

往往有個尷尬的情況,從一個項目開始到結束,框架update了好幾個版本,新版有一些讓人垂涎若滴的特性,但無助有些api發生了change。所以在專案內可以盡量保持框架版本穩定,專案開始前盡量考慮不同版本的利弊,有時候適當的學習是必要的。

另外,對不同的框架懷抱著一顆包容的心。

4. 一次訓練的時間挺長的,coding結束不要盲目的就開始跑實驗,個人經驗提供debug模式來實驗小數據 更多的log是個不錯的選擇。

5. 記錄好隨著模型update performance的變化,因為可能隨時需要退回去重來。

作者:OpenMMLab
連結:https://www.zhihu.com/question/269707221/answer/2480772257
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者授權,非商業轉載請註明出處。

題主你好呀,前面的回答提到了使用 Tensorboard、Weights&Biases、MLFlow、Neptune 等工具來管理實驗數據。然而隨著實驗管理工具的輪子越造越多,工具的學習成本也越來越高,我們又該如何選擇呢?

MMCV 滿足你的所有幻想,透過修改設定檔就能實現工具的切換。

github.com/open-mmlab/mmcv

Tensorboard 記錄實驗數據:

設定檔:

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='TensorboardLoggerHook') ])
登入後複製

TensorBoard 數據視覺化效果

深度學習科研,如何有效率地進行程式碼和實驗管理?

WandB 記錄實驗數據

##設定檔

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='WandbLoggerHook') ])
登入後複製

Wandb 資料視覺化效果

(需要提前用python api 登入wandb)

深度學習科研,如何有效率地進行程式碼和實驗管理?

#Neptume 記錄實驗資料

設定檔

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='NeptuneLoggerHook',  init_kwargs=dict(project='Your Neptume account/mmcv')) ])
登入後複製

Neptume 視覺化效果

深度學習科研,如何有效率地進行程式碼和實驗管理?

mlflow 記錄實驗資料

設定檔

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='MlflowLoggerHook') ])
登入後複製

MLFlow 視覺化效果

深度學習科研,如何有效率地進行程式碼和實驗管理?

dvclive 記錄實驗資料

設定檔

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='DvcliveLoggerHook') ])
登入後複製

產生的html 檔案

深度學習科研,如何有效率地進行程式碼和實驗管理?

以上只使用了各種實驗管理工具最基本的功能,我們可以進一步修改設定檔來解鎖更多姿勢。

擁有了 MMCV,就等於擁有了所有的實驗管理工具。如果你以前是tf boy,可以選擇TensorBoard 經典懷舊風;如果你想應有盡有的記錄實驗數據、實驗環境,不妨嘗試一下Wandb(Weights & Biases)或者Neptume;如果你的設備沒法聯網,可以選擇mlflow 將實驗數據存到本地,總有一款工具適合你。

此外 MMCV 也有自己的日誌管理系統,那就是

 #TextLoggerHook !它會將訓練過程中產生的全量訊息,例如設備環境、資料集、模型初始化方式、訓練期間產生的 loss、metric 等信息,全部保存到本地的 xxx.log 檔案。你可以在不借助任何工具的情況下,回顧先前的實驗數據。

還在糾結使用哪個實驗管理工具?還在苦惱於各種工具的學習成本?趕快上車 MMCV ,幾行設定檔無痛體驗各種工具。

github.com/open-mmlab/mmcv

以上是深度學習科研,如何有效率地進行程式碼和實驗管理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
自動駕駛場景中的長尾問題怎麼解決? 自動駕駛場景中的長尾問題怎麼解決? Jun 02, 2024 pm 02:44 PM

昨天面試被問到了是否做過長尾相關的問題,所以就想著簡單總結一下。自動駕駛長尾問題是指自動駕駛汽車中的邊緣情況,即發生機率較低的可能場景。感知的長尾問題是目前限制單車智慧自動駕駛車輛運行設計域的主要原因之一。自動駕駛的底層架構和大部分技術問題已經解決,剩下的5%的長尾問題,逐漸成了限制自動駕駛發展的關鍵。這些問題包括各種零碎的場景、極端的情況和無法預測的人類行為。自動駕駛中的邊緣場景"長尾"是指自動駕駛汽車(AV)中的邊緣情況,邊緣情況是發生機率較低的可能場景。這些罕見的事件

超越ORB-SLAM3! SL-SLAM:低光、嚴重抖動和弱紋理場景全搞定 超越ORB-SLAM3! SL-SLAM:低光、嚴重抖動和弱紋理場景全搞定 May 30, 2024 am 09:35 AM

寫在前面今天我們探討下深度學習技術如何改善在複雜環境中基於視覺的SLAM(同時定位與地圖建構)表現。透過將深度特徵提取和深度匹配方法相結合,這裡介紹了一種多功能的混合視覺SLAM系統,旨在提高在諸如低光條件、動態光照、弱紋理區域和嚴重抖動等挑戰性場景中的適應性。我們的系統支援多種模式,包括拓展單目、立體、單目-慣性以及立體-慣性配置。除此之外,也分析如何將視覺SLAM與深度學習方法結合,以啟發其他研究。透過在公共資料集和自採樣資料上的廣泛實驗,展示了SL-SLAM在定位精度和追蹤魯棒性方面優

選擇相機還是光達?實現穩健的三維目標檢測的最新綜述 選擇相機還是光達?實現穩健的三維目標檢測的最新綜述 Jan 26, 2024 am 11:18 AM

0.寫在前面&&個人理解自動駕駛系統依賴先進的感知、決策和控制技術,透過使用各種感測器(如相機、光達、雷達等)來感知周圍環境,並利用演算法和模型進行即時分析和決策。這使得車輛能夠識別道路標誌、檢測和追蹤其他車輛、預測行人行為等,從而安全地操作和適應複雜的交通環境。這項技術目前引起了廣泛的關注,並認為是未來交通領域的重要發展領域之一。但是,讓自動駕駛變得困難的是弄清楚如何讓汽車了解周圍發生的事情。這需要自動駕駛系統中的三維物體偵測演算法可以準確地感知和描述周圍環境中的物體,包括它們的位置、

SIMPL:用於自動駕駛的簡單高效的多智能體運動預測基準 SIMPL:用於自動駕駛的簡單高效的多智能體運動預測基準 Feb 20, 2024 am 11:48 AM

原文標題:SIMPL:ASimpleandEfficientMulti-agentMotionPredictionBaselineforAutonomousDriving論文連結:https://arxiv.org/pdf/2402.02519.pdf程式碼連結:https://github.com/HKUST-Aerial-Robotics/SIMPLobotics單位論文想法:本文提出了一種用於自動駕駛車輛的簡單且有效率的運動預測基線(SIMPL)。與傳統的以代理為中心(agent-cent

FisheyeDetNet:首個以魚眼相機為基礎的目標偵測演算法 FisheyeDetNet:首個以魚眼相機為基礎的目標偵測演算法 Apr 26, 2024 am 11:37 AM

目標偵測在自動駕駛系統當中是一個比較成熟的問題,其中行人偵測是最早得以部署演算法之一。在多數論文當中已經進行了非常全面的研究。然而,利用魚眼相機進行環視的距離感知相對來說研究較少。由於徑向畸變大,標準的邊界框表示在魚眼相機當中很難實施。為了緩解上述描述,我們探索了擴展邊界框、橢圓、通用多邊形設計為極座標/角度表示,並定義一個實例分割mIOU度量來分析這些表示。所提出的具有多邊形形狀的模型fisheyeDetNet優於其他模型,並同時在用於自動駕駛的Valeo魚眼相機資料集上實現了49.5%的mAP

自動駕駛與軌跡預測看這篇就夠了! 自動駕駛與軌跡預測看這篇就夠了! Feb 28, 2024 pm 07:20 PM

軌跡預測在自動駕駛中承擔著重要的角色,自動駕駛軌跡預測是指透過分析車輛行駛過程中的各種數據,預測車輛未來的行駛軌跡。作為自動駕駛的核心模組,軌跡預測的品質對於下游的規劃控制至關重要。軌跡預測任務技術堆疊豐富,需熟悉自動駕駛動/靜態感知、高精地圖、車道線、神經網路架構(CNN&GNN&Transformer)技能等,入門難度很高!許多粉絲期望能夠盡快上手軌跡預測,少踩坑,今天就為大家盤點下軌跡預測常見的一些問題和入門學習方法!入門相關知識1.預習的論文有沒有切入順序? A:先看survey,p

聊聊端到端與下一代自動駕駛系統,以及端到端自動駕駛的一些迷思? 聊聊端到端與下一代自動駕駛系統,以及端到端自動駕駛的一些迷思? Apr 15, 2024 pm 04:13 PM

最近一個月由於眾所周知的一些原因,非常密集地和業界的各種老師同學進行了交流。交流中必不可免的一個話題自然是端到端與火辣的特斯拉FSDV12。想藉此機會,整理當下這個時刻的一些想法和觀點,供大家參考和討論。如何定義端到端的自動駕駛系統,應該期望端到端解決什麼問題?依照最傳統的定義,端到端的系統指的是一套系統,輸入感測器的原始訊息,直接輸出任務關心的變數。例如,在影像辨識中,CNN相對於傳統的特徵提取器+分類器的方法就可以稱之為端到端。在自動駕駛任務中,輸入各種感測器的資料(相機/LiDAR

超強!深度學習Top10演算法! 超強!深度學習Top10演算法! Mar 15, 2024 pm 03:46 PM

自2006年深度學習概念被提出以來,20年快過去了,深度學習作為人工智慧領域的一場革命,已經催生了許多具有影響力的演算法。那麼,你所認為深度學習的top10演算法有哪些呢?以下是我心目中深度學習的頂尖演算法,它們在創新、應用價值和影響力方面都佔有重要地位。 1.深度神經網路(DNN)背景:深度神經網路(DNN)也叫多層感知機,是最普遍的深度學習演算法,發明之初由於算力瓶頸而飽受質疑,直到近些年算力、數據的爆發才迎來突破。 DNN是一種神經網路模型,它包含多個隱藏層。在該模型中,每一層將輸入傳遞給下一層,並

See all articles