يعد البنية البسيطة والمصممة بشكل جيد ضرورية لأي مشروع تعليمي عميق ، لذلك بعد الكثير من التدريبات والمساهمة في مشاريع Pytorch ، إليك قالب مشروع Pytorch يجمع بين البساطة وأفضل الممارسات لهيكل المجلد وتصميم OOP الجيد . الفكرة الرئيسية هي أن هناك الكثير من الأشياء التي تقوم بها في كل مرة تقوم فيها ببدء مشروع 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 )ستجد ملف قالبًا ومثالًا بسيطًا في مجلد النموذج والمدرب الذي يوضح لك كيفية تجربة نموذجك الأول ببساطة.
├── 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
أي نوع من التحسين أو المساهمة موضع ترحيب.