・ ・ |
Ignite est une bibliothèque de haut niveau pour aider à la formation et à l'évaluation des réseaux de neurones dans PyTorch de manière flexible et transparente.
Cliquez sur l'image pour voir le code complet
Moins de code que PyTorch pur tout en garantissant un maximum de contrôle et de simplicité
Approche bibliothèque et inversion de contrôle sans programme - Utilisez Ignite où et quand vous en avez besoin
API extensible pour les métriques, les gestionnaires d'expériences et d'autres composants
Ignite est une bibliothèque qui fournit trois fonctionnalités de haut niveau :
Plus besoin de coder des boucles for/while
sur les époques et les itérations. Les utilisateurs instancient les moteurs et les exécutent.
from ignite . engine import Engine , Events , create_supervised_evaluator
from ignite . metrics import Accuracy
# Setup training engine:
def train_step ( engine , batch ):
# Users can do whatever they need on a single iteration
# Eg. forward/backward pass for any number of models, optimizers, etc
# ...
trainer = Engine ( train_step )
# Setup single model evaluation engine
evaluator = create_supervised_evaluator ( model , metrics = { "accuracy" : Accuracy ()})
def validation ():
state = evaluator . run ( validation_data_loader )
# print computed metrics
print ( trainer . state . epoch , state . metrics )
# Run model's validation at the end of each epoch
trainer . add_event_handler ( Events . EPOCH_COMPLETED , validation )
# Start the training
trainer . run ( training_data_loader , max_epochs = 100 )
Ce qui est cool avec les gestionnaires, c'est qu'ils offrent une flexibilité inégalée (par rapport, par exemple, aux rappels). Les gestionnaires peuvent être n'importe quelle fonction : par exemple lambda, fonction simple, méthode de classe, etc. Ainsi, nous n'avons pas besoin d'hériter d'une interface et de remplacer ses méthodes abstraites, ce qui pourrait inutilement alourdir votre code et sa complexité.
trainer . add_event_handler ( Events . STARTED , lambda _ : print ( "Start training" ))
# attach handler with args, kwargs
mydata = [ 1 , 2 , 3 , 4 ]
logger = ...
def on_training_ended ( data ):
print ( f"Training is ended. mydata= { data } " )
# User can use variables from another scope
logger . info ( "Training is ended" )
trainer . add_event_handler ( Events . COMPLETED , on_training_ended , mydata )
# call any number of functions on a single event
trainer . add_event_handler ( Events . COMPLETED , lambda engine : print ( engine . state . times ))
@ trainer . on ( Events . ITERATION_COMPLETED )
def log_something ( engine ):
print ( engine . state . output )
# run the validation every 5 epochs
@ trainer . on ( Events . EPOCH_COMPLETED ( every = 5 ))
def run_validation ():
# run validation
# change some training variable once on 20th epoch
@ trainer . on ( Events . EPOCH_STARTED ( once = 20 ))
def change_training_variable ():
# ...
# Trigger handler with customly defined frequency
@ trainer . on ( Events . ITERATION_COMPLETED ( event_filter = first_x_iters ))
def log_gradients ():
# ...
Les événements peuvent être empilés pour permettre plusieurs appels :
@ trainer . on ( Events . COMPLETED | Events . EPOCH_COMPLETED ( every = 10 ))
def run_validation ():
# ...
Événements personnalisés liés aux appels d'étapes en arrière et d'optimisation :
from ignite . engine import EventEnum
class BackpropEvents ( EventEnum ):
BACKWARD_STARTED = 'backward_started'
BACKWARD_COMPLETED = 'backward_completed'
OPTIM_STEP_COMPLETED = 'optim_step_completed'
def update ( engine , batch ):
# ...
loss = criterion ( y_pred , y )
engine . fire_event ( BackpropEvents . BACKWARD_STARTED )
loss . backward ()
engine . fire_event ( BackpropEvents . BACKWARD_COMPLETED )
optimizer . step ()
engine . fire_event ( BackpropEvents . OPTIM_STEP_COMPLETED )
# ...
trainer = Engine ( update )
trainer . register_events ( * BackpropEvents )
@ trainer . on ( BackpropEvents . BACKWARD_STARTED )
def function_before_backprop ( engine ):
# ...
Métriques pour diverses tâches : Précision, Rappel, Exactitude, Matrice de confusion, IoU, etc., ~20 métriques de régression.
Les utilisateurs peuvent également composer facilement leurs métriques à partir de celles existantes à l’aide d’opérations arithmétiques ou de méthodes torch.
precision = Precision ( average = False )
recall = Recall ( average = False )
F1_per_class = ( precision * recall * 2 / ( precision + recall ))
F1_mean = F1_per_class . mean () # torch mean method
F1_mean . attach ( engine , "F1" )
De pip :
pip install pytorch-ignite
De conda :
conda install ignite -c pytorch
De la source :
pip install git+https://github.com/pytorch/ignite
De pip :
pip install --pre pytorch-ignite
Depuis conda (cela suggère d'installer la version nocturne de pytorch au lieu de la version stable en tant que dépendance) :
conda install ignite -c pytorch-nightly
Extrayez une image Docker prédéfinie de notre Docker Hub et exécutez-la avec Docker v19.03+.
docker run --gpus all -it -v $PWD :/workspace/project --network=host --shm-size 16G pytorchignite/base:latest /bin/bash
Base
pytorchignite/base:latest
pytorchignite/apex:latest
pytorchignite/hvd-base:latest
pytorchignite/hvd-apex:latest
pytorchignite/msdp-apex:latest
Vision:
pytorchignite/vision:latest
pytorchignite/hvd-vision:latest
pytorchignite/apex-vision:latest
pytorchignite/hvd-apex-vision:latest
pytorchignite/msdp-apex-vision:latest
PNL :
pytorchignite/nlp:latest
pytorchignite/hvd-nlp:latest
pytorchignite/apex-nlp:latest
pytorchignite/hvd-apex-nlp:latest
pytorchignite/msdp-apex-nlp:latest
Pour plus de détails, voir ici.
Quelques conseils pour commencer :
Inspirés par torchvision/références, nous fournissons plusieurs lignes de base reproductibles pour les tâches de vision :
Caractéristiques:
Le moyen le plus simple de créer vos scripts de formation avec PyTorch-Ignite :
Problèmes GitHub : questions, rapports de bogues, demandes de fonctionnalités, etc.
Discutez.PyTorch, catégorie "Ignite".
PyTorch-Ignite Discord Server : pour discuter avec la communauté
Discussions GitHub : discussions générales liées à la bibliothèque, idées, questions-réponses, etc.
Nous avons créé un formulaire de « commentaires des utilisateurs ». Nous apprécions tout type de commentaires, et voici comment nous aimerions voir notre communauté :
Merci!
Veuillez consulter les directives de contribution pour plus d’informations.
Comme toujours, les PR sont les bienvenus :)
Voir d'autres projets sur "Utilisé par"
Si votre projet implémente un article, représente d'autres cas d'utilisation non couverts dans nos tutoriels officiels, le code du concours Kaggle, ou simplement votre code présente des résultats intéressants et utilise Ignite. Nous aimerions ajouter votre projet à cette liste, alors veuillez envoyer un PR avec une brève description du projet.
Si vous utilisez PyTorch-Ignite dans une publication scientifique, nous apprécierions les citations de notre projet.
@misc{pytorch-ignite,
author = {V. Fomin and J. Anmol and S. Desroziers and J. Kriss and A. Tejani},
title = {High-level library to help with training neural networks in PyTorch},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/pytorch/ignite}},
}
PyTorch-Ignite est un projet affilié à NumFOCUS, exploité et maintenu par des bénévoles de la communauté PyTorch en leur qualité d'individus (et non en tant que représentants de leurs employeurs). Consultez la page « À propos de nous » pour une liste des principaux contributeurs. Pour les questions et problèmes d’utilisation, veuillez consulter les différents canaux ici. Pour toutes autres questions et demandes de renseignements, veuillez envoyer un e-mail à [email protected].