Eine einfache und gut gestaltete Struktur ist für jedes Deep -Learning -Projekt unerlässlich. Nach viel Übung und einem Beitrag zu Pytorch -Projekten finden Sie hier eine Pytorch -Projektvorlage, die Einfachheit, Best Practice für die Ordnerstruktur und ein gutes OOP -Design kombiniert. Die Hauptidee ist, dass es jedes Mal, wenn Sie Ihr Pytorch -Projekt starten, viel gleiche Dinge gibt. Wenn Sie also all diese gemeinsam genutzten Sachen wickeln, können Sie jedes Mal, wenn Sie ein neues Pytorch -Projekt starten, die Kernidee ändern.
Hier finden Sie eine einfache Pytorch -Vorlage, mit der Sie schneller in Ihr Hauptprojekt einsteigen und sich nur auf Ihren Kern konzentrieren (Modellarchitektur, Trainingsfluss usw.).
Um wiederholte Dinge zu verringern, empfehlen wir, eine hochrangige Bibliothek zu verwenden. Sie können Ihre eigene hochrangige Bibliothek schreiben oder nur einige Bibliotheken von Drittanbietern wie Ignite, Fastai, MMCV verwenden. Hier verwenden wir Ignite, um MNIST als Beispiel zu trainieren.
Kurz gesagt, Sie verwenden diese Vorlage. Nehmen wir beispielsweise an, dass Sie Resnet-18 implementieren möchten, um MNIST zu trainieren. Sie sollten also Folgendes tun:
modeling erstellen Sie eine Python -Datei mit dem Namen WAS WAS WAS IHREN WIRD NACHEN Wir haben sie als example_model.py bezeichnet. In modeling/__init__.py -Datei können Sie eine Funktion namens build_model erstellen, um Ihr Modell aufzurufen from . example_model import ResNet18
def build_model ( cfg ):
model = ResNet18 ( cfg . MODEL . NUM_CLASSES )
return modelengine eine Modelltrainerfunktion und Inferenzfunktion. In der Trainerfunktion müssen Sie die Logik des Trainingsprozesses schreiben. Sie können eine Bibliothek von Drittanbietern verwenden, um die wiederholten Dinge zu verringern. # trainer
def do_train ( cfg , model , train_loader , val_loader , optimizer , scheduler , loss_fn ):
"""
implement the logic of epoch:
-loop on the number of iterations in the config and call the train step
-add any summaries you want using the summary
"""
pass
# inference
def inference ( cfg , model , val_loader ):
"""
implement the logic of the train step
- run the tensorflow session
- return any metrics you need to summarize
"""
passtools erstellen Sie den train.py . In dieser Datei müssen Sie die Instanzen der folgenden Objekte "Modell", "Dataloader", "Optimierer" und Konfiguration abrufen # create instance of the model you want
model = build_model ( cfg )
# create your data generator
train_loader = make_data_loader ( cfg , is_train = True )
val_loader = make_data_loader ( cfg , is_train = False )
# create your model optimizer
optimizer = make_optimizer ( cfg , model )do_train und beginnen Sie Ihr Training # here you train your model
do_train ( cfg , model , train_loader , val_loader , optimizer , None , F . cross_entropy )Sie finden eine Vorlagendatei und ein einfaches Beispiel im Model- und Trainerordner, in dem Sie Ihr erstes Modell einfach ausprobieren.
├── config
│ └── defaults.py - here's the default config file.
│
│
├── configs
│ └── train_mnist_softmax.yml - here's the specific config file for specific model or dataset.
│
│
├── data
│ └── datasets - here's the datasets folder that is responsible for all data handling.
│ └── transforms - here's the data preprocess folder that is responsible for all data augmentation.
│ └── build.py - here's the file to make dataloader.
│ └── collate_batch.py - here's the file that is responsible for merges a list of samples to form a mini-batch.
│
│
├── engine
│ ├── trainer.py - this file contains the train loops.
│ └── inference.py - this file contains the inference process.
│
│
├── layers - this folder contains any customed layers of your project.
│ └── conv_layer.py
│
│
├── modeling - this folder contains any model of your project.
│ └── example_model.py
│
│
├── solver - this folder contains optimizer of your project.
│ └── build.py
│ └── lr_scheduler.py
│
│
├── tools - here's the train/test model of your project.
│ └── train_net.py - here's an example of train model that is responsible for the whole pipeline.
│
│
└── utils
│ ├── logger.py
│ └── any_other_utils_you_need
│
│
└── tests - this foler contains unit test of your project.
├── test_data_sampler.py
Jede Art von Verbesserung oder Beitrag wird begrüßt.