Простая и хорошо спроектированная структура необходима для любого проекта глубокого обучения, поэтому после большой практики и участия в проектах Pytorch Вот шаблон проекта Pytorch, который сочетает в себе простоту, наилучшую практику для структуры папок и хорошего дизайна ООП . Основная идея заключается в том, что есть много же вещей, которые вы делаете каждый раз, когда вы начинаете свой проект Pytorch, поэтому обертка всего этого общего материала поможет вам изменить только основную идею каждый раз, когда вы начинаете новый проект Pytorch.
Итак, вот простой шаблон Pytorch, который поможет вам быстрее попасть в ваш основной проект и просто сосредоточиться на своем ядре (модельная архитектура, тренировочный поток и т. Д.)
Чтобы уменьшить повторные вещи, мы рекомендуем использовать библиотеку высокого уровня. Вы можете написать свою собственную библиотеку высокого уровня, или вы можете просто использовать некоторые библиотеки третьих частей, такие как Ignite, Fastai, MMCV ... и т. Д. Это может помочь вам написать компактные, но полнофункциональные петли обучения в нескольких строках кода. Здесь мы используем Ignite для обучения Mnist в качестве примера.
В двух словах вот как использовать этот шаблон, поэтому , например, предположим, что вы хотите реализовать Resnet-18 для обучения Mnist, поэтому вы должны сделать следующее:
modeling Создайте файл Python с именем, который вам нравится, здесь мы назвали его example_model.py . В файле modeling/__init__.py вы можете создать функцию с именем build_model , чтобы вызвать свою модель from . example_model import ResNet18
def build_model ( cfg ):
model = ResNet18 ( cfg . MODEL . NUM_CLASSES )
return modelengine создайте функцию тренера моделя и функцию вывода. В функции тренера вам необходимо написать логику учебного процесса, вы можете использовать некоторую стороннюю библиотеку для уменьшения повторяющихся вещей. # 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 вы создаете train.py . В этом файле вам необходимо получить экземпляры следующих объектов «Модель», «DataLoader», «Optimizer» и Config # 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 и начните обучение # here you train your model
do_train ( cfg , model , train_loader , val_loader , optimizer , None , F . cross_entropy )Вы найдете файл шаблона и простой пример в папке Model и Trainer, который показывает вам, как просто попробовать свою первую модель.
├── 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
Любой вид улучшения или вклада приветствуется.