有沒有什么高效「煉丹」神器可以推薦?復(fù)旦fastNLP團隊祭出內(nèi)部調(diào)參利器fitlog
集 Tabular 顯示實驗結(jié)果、自定義備忘、前端操作刪除/隱藏記錄、自動 git commit 等諸多功能于一體,這個調(diào)參神器助你高效「煉出金丹」。
「有沒有什么可以節(jié)省大量時間的 Deep Learning 效率神器?」有人在知乎上問出了這樣一個問題。在回答區(qū),復(fù)旦大學(xué)計算機科學(xué)技術(shù)學(xué)院副教授邱錫鵬介紹了他們實驗室內(nèi)部使用的調(diào)參利器——fitlog。
fitlog 是一款集成了自動版本管理和自動日志記錄兩種功能的 Python 包,由復(fù)旦大學(xué)計算機科學(xué)技術(shù)學(xué)院自然語言處理與深度學(xué)習(xí)組的 fastNLP 團隊開發(fā)的。它可以幫助你在進行實驗時方便地保存當(dāng)前的代碼、參數(shù)和結(jié)果。
根據(jù)邱錫鵬老師的介紹,fitlog 有很多非常實用的功能,如用 Tabular 顯示實驗結(jié)果;在后臺自動 git commit 代碼;超參數(shù)可視化;架構(gòu)無關(guān),TensorFlow、Pytorch 都支持……
如果實驗效果不理想,fitlog 還支持前端操作刪除、隱藏記錄,讓網(wǎng)友高呼「優(yōu)秀」。
而且,figlog 的安裝非常簡單,使用 pip install fitlog 即可完成安裝。
- GitHub 地址:https://github.com/fastnlp/fitlog
- 中文文檔:https://fitlog.readthedocs.io/zh/latest/
fitlog 到底有多好用
想必機器之心的讀者都不會對 TensorBoard 感到陌生,它為我們提供了一個高效調(diào)參的途徑。雖然 TensorBoard 功能強大、界面美觀,但仍無法滿足我們?nèi)粘K械摹笩挼ぁ剐枨?。使?fitlog 或許能夠解決一些深度學(xué)習(xí)中調(diào)參的痛點,下面我們來看一看它都有些什么功能。
用 Tabular 顯示實驗結(jié)果
fitlog 支持利用 Tabular 顯示實驗結(jié)果,方便不同超參數(shù)之間的對比。如下圖所示,表中的每一行代表一次實驗:
具體來說,fitlog 可以:
- 支持 group 操作,方便查看某種特定數(shù)據(jù)集或參數(shù)的性能;
- 支持排序,最強超參數(shù)一目了然;
- 支持 column 順序、顯示自定義,拯救強迫癥;
4. 支持針對某條實驗自定義備忘;
5. 支持前端加入別人實驗的性能數(shù)據(jù),方便與 SOTA 結(jié)果對比;
6. 支持計算平均值、標(biāo)準(zhǔn)差;
7. 如果實驗結(jié)果不理想,fitlog 支持前端操作刪除、隱藏記錄;
8. 支持導(dǎo)出 excel、csv、txt、json 等格式,滿足分析需求;
9. 記錄 metric
機器學(xué)習(xí)不可避免地需要使用一些如 loss 之類的關(guān)鍵 metric,以便讓我們了解訓(xùn)練過程是如何進行的。這些 metric 能夠幫助我們判斷模型是否已經(jīng)過擬合或仍存在可提升的空間。并且,通過比較這些 metric 能夠幫助我們進行超參數(shù)的調(diào)整、提高模型性能。
下圖為使用 fitlog 記錄的 metric:
下圖為使用 TensorBoard 的 scalars 記錄示意圖:
從以上兩幅圖中可以看到,在記錄 metric 方面來說,fitlog 與 TensorBoard 的體驗是比較接近的。
支持在后臺自動 git commit 代碼
要想復(fù)現(xiàn)實驗結(jié)果,只有超參數(shù)是不夠的,所以 fitlog 支持在后臺為用戶自動 git commit 代碼(fitlog 借助 git 進行代碼管理,但與開發(fā)者自己管理的 git 不沖突,是并行的)。如果需要回退到某次實驗的代碼,直接前端點擊「回退」就可以搞定。fitlog 甚至可以幫用戶管理隨機數(shù)種子,但 pytorch 等深度學(xué)習(xí)框架本身的隨機性無法解決。
超參數(shù)可視化
深度學(xué)習(xí)涉及大量的超參數(shù)調(diào)整。有時候,一組好的超參數(shù)組合帶來的性能提升,甚至要超過部分算法的改進。因此,記錄下這些超參數(shù)對于模型性能的影響顯得至關(guān)重要。選定一個 metric,可視化地展示出在不同超參數(shù)組合下,這個 metric 的變化趨勢,能夠極大地提高我們進行超參數(shù)搜索的效率。而 fitlog 正好可以提供你需要的可視化(下圖中的每條線代表一次實驗,最左側(cè)是 dev 上的性能)。
該功能類似于 TensorBoard 中的 HParams,如下圖所示:
架構(gòu)無關(guān),TensorFlow、PyTorch 都能用
fitlog 是架構(gòu)無關(guān)的,tensorflow 和 pytorch 都能使用。除了自然語言處理,它還能用于計算機視覺任務(wù)。如果是自然語言處理任務(wù),可以配合 fastNLP 框架一起使用,只需要增加三五行代碼便可以實現(xiàn) metric、loss 的自動記錄。
有待提升的地方
作為一個輕量級的工具,fitlog 也有自身的缺點,如:
- 不支持保存 model 輸出的圖片,但是支持查看訓(xùn)練過程中的文本輸出;
- 不支持除了 loss 與 metric 以外的曲線的展示。
例如,當(dāng)我們需要查看輸入數(shù)據(jù)、可視化網(wǎng)絡(luò)層權(quán)重時,圖像的記錄與顯示會非常有幫助。下圖展示了在 TensorBoard 中顯示 Fashion-MNIST 數(shù)據(jù)集里的部分圖片:
此外,可視化展示混淆矩陣(confusion matrix)對于分類模型的調(diào)參也很有幫助?;煜仃囀菣C器學(xué)習(xí)中用來總結(jié)分類模型預(yù)測結(jié)果的分析手段之一,其使用矩陣的形式將真實類別與模型預(yù)測的類別進行匯總,讓我們能夠較為直觀地了解模型在哪些樣本的預(yù)測上表現(xiàn)不是很好。從下圖中可以較明顯地看出,該分類模型將 Shirts、T-Shirts 和 Pullovers 弄混了,模型的預(yù)測性能有待改進。
以上功能是 fitlog 所不具備的,如果這對于你來說是必不可少的功能的話,目前來說可能還是得選擇 TensorBoard。