中文版中文版
Pytorch-Lightning是一個非常方便的庫。它可以看作是Pytorch的抽象和包裝。它的優勢是強大的可重複使用,易於維護,清晰的邏輯等。缺點是它太重了,需要大量時間學習和理解。此外,由於它直接綁定了模型和培訓代碼,因此它不適用於具有多個模型和數據集文件的真實項目。數據模塊設計也是如此。諸如DataLoader和自定義數據集之類的強大耦合也會引起類似的問題:在此處和那裡都將相同的代碼複製和粘貼。
經過大量的探索和實踐,我總結了以下模板,這也可能是pytorch光線的進一步抽象。在第一個版本中,所有模板內容都在根文件夾下。但是,使用了一個多月後,我發現更多類型的項目的指定模板可以提高編碼效率。例如,分類和超分辨率任務都具有一些固定的需求點。可以通過直接修改專用模板來更快地實現項目代碼,並且一些可避免的錯誤也減少了。
**目前,由於這仍然是一個新庫,因此只有這兩個模板。但是,後來我將其應用於其他項目時,還將添加新的專業模板。如果您已將此模板用於任務(例如NLP,GAN,語音識別等),歡迎您提交PR,以便您可以將模板集成到庫中以供更多人使用。如果您的任務尚未在列表中,則從classification模板開始是一個不錯的選擇。由於模板的大多數基礎邏輯和代碼都是相同的,因此可以很快完成。 **
歡迎每個人嘗試這套代碼樣式。如果您習慣了,重複使用非常方便,並且倒入孔中並不容易。可以在本文Zhihu博客中找到一個更詳細的解釋和完整的pytorch燈指南。
root-
|-data
|-__init__.py
|-data_interface.py
|-xxxdataset1.py
|-xxxdataset2.py
|-...
|-model
|-__init__.py
|-model_interface.py
|-xxxmodel1.py
|-xxxmodel2.py
|-...
|-main.py
|-utils.py
不需要安裝。直接運行git clone https://github.com/miracleyoo/pytorch-lightning-template.git將其克隆到您的本地位置。選擇您的問題類型(例如classification ,然後將相應的模板複製到項目目錄。
這僅在根目錄中僅是main.py和utils.py 。前者是代碼的入口,後者是支持文件。
data和modle文件夾中都有一個__init__.py文件,以使其成為軟件包。這樣,導入變得更加容易。
創建一個class DInterface(pl.LightningDataModule):在data_interface中作為所有不同託管數據集文件的接口工作。相應的數據集類在__init__()函數中導入。實例化是在setup()中完成的,而train_dataloader , val_dataloader , test_dataloader函數將創建。
同樣, class MInterface(pl.LightningModule):在model_interface中創建以作為所有模型文件的接口工作。相應的模型類在__init__()函數中導入。您唯一需要在接口中修改的內容是諸如configure_optimizers , training_step , validation_step之類的功能,可以控制您自己的培訓過程。所有模型的一個接口,並且差異在ARGS中處理。
main.py僅負責以下任務:
main.py file. For example, there is a string argument called random_arg , you can add parser.add_argument('--random_arg', default='test', type=str) to the main.py file.) Two Interface class will automatically select and pass those arguments to the corresponding model/data class.callback函數,例如自動保存,早期停止和LR調度程序。MInterface , DInterface , Trainer 。鰭。
您需要注意的一件事是,為了讓MInterface和DInterface能夠通過簡單地指定參數--model_name和--dataset自動解析您的新添加的型號和數據集,我們將Snake Case(例如standart_net.py)(例如standard_net.py )用於模型/DataSet文件,並將其用於類似於Cameel Case for Casmel Case instand StandardNet型號。
data文件夾也是如此。
儘管這似乎限制了您對模型和數據集的命名,但它也可以使您的代碼易於閱讀和理解。請注意這一點,以避免解析問題。
如果您使用此模板並發現對您的研究有幫助,請考慮引用我們的論文:
@article{ZHANG2023126388,
title = {Neuromorphic high-frequency 3D dancing pose estimation in dynamic environment},
journal = {Neurocomputing},
volume = {547},
pages = {126388},
year = {2023},
issn = {0925-2312},
doi = {https://doi.org/10.1016/j.neucom.2023.126388},
url = {https://www.sciencedirect.com/science/article/pii/S0925231223005118},
author = {Zhongyang Zhang and Kaidong Chai and Haowen Yu and Ramzi Majaj and Francesca Walsh and Edward Wang and Upal Mahbub and Hava Siegelmann and Donghyun Kim and Tauhidur Rahman},
keywords = {Event Camera, Dynamic Vision Sensor, Neuromorphic Camera, Simulator, Dataset, Deep Learning, Human Pose Estimation, 3D Human Pose Estimation, Technology-Mediated Dancing},
}
@InProceedings{Zhang_2022_WACV,
author = {Zhang, Zhongyang and Xu, Zhiyang and Ahmed, Zia and Salekin, Asif and Rahman, Tauhidur},
title = {Hyperspectral Image Super-Resolution in Arbitrary Input-Output Band Settings},
booktitle = {Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision (WACV) Workshops},
month = {January},
year = {2022},
pages = {749-759}
}