・ ・ |
Ignite ist eine High-Level-Bibliothek, die beim flexiblen und transparenten Training und der Bewertung neuronaler Netze in PyTorch hilft.
Klicken Sie auf das Bild, um den vollständigen Code anzuzeigen
Weniger Code als reines PyTorch bei gleichzeitiger Gewährleistung maximaler Kontrolle und Einfachheit
Bibliotheksansatz und keine Umkehrung der Programmsteuerung – Verwenden Sie Ignite, wo und wann Sie es brauchen
Erweiterbare API für Metriken, Experimentmanager und andere Komponenten
Ignite ist eine Bibliothek , die drei High-Level-Funktionen bietet:
Keine Codierung for/while
-Schleifen mehr für Epochen und Iterationen. Benutzer instanziieren Engines und führen sie aus.
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 )
Das Coole an Handlern ist, dass sie eine beispiellose Flexibilität bieten (im Vergleich beispielsweise zu Rückrufen). Handler können beliebige Funktionen sein: z. B. Lambda, einfache Funktion, Klassenmethode usw. Daher ist es nicht erforderlich, von einer Schnittstelle zu erben und deren abstrakte Methoden zu überschreiben, was Ihren Code und seine Komplexität unnötig vergrößern könnte.
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 ():
# ...
Ereignisse können gestapelt werden, um mehrere Anrufe zu ermöglichen:
@ trainer . on ( Events . COMPLETED | Events . EPOCH_COMPLETED ( every = 10 ))
def run_validation ():
# ...
Benutzerdefinierte Ereignisse im Zusammenhang mit Rückwärts- und Optimierungsschrittaufrufen:
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 ):
# ...
Metriken für verschiedene Aufgaben: Präzision, Rückruf, Genauigkeit, Verwirrungsmatrix, IoU usw., ~20 Regressionsmetriken.
Benutzer können ihre Metriken auch problemlos aus vorhandenen Metriken zusammenstellen, indem sie arithmetische Operationen oder Fackelmethoden verwenden.
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" )
Von pip:
pip install pytorch-ignite
Von Conda:
conda install ignite -c pytorch
Aus Quelle:
pip install git+https://github.com/pytorch/ignite
Von pip:
pip install --pre pytorch-ignite
Von Conda (dies schlägt vor, die nächtliche Veröffentlichung von Pytorch anstelle der stabilen Version als Abhängigkeit zu installieren):
conda install ignite -c pytorch-nightly
Rufen Sie ein vorgefertigtes Docker-Image von unserem Docker Hub ab und führen Sie es mit Docker v19.03+ aus.
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
NLP:
pytorchignite/nlp:latest
pytorchignite/hvd-nlp:latest
pytorchignite/apex-nlp:latest
pytorchignite/hvd-apex-nlp:latest
pytorchignite/msdp-apex-nlp:latest
Weitere Einzelheiten finden Sie hier.
Einige Hinweise für den Einstieg:
Inspiriert durch Torchvision/Referenzen bieten wir mehrere reproduzierbare Grundlagen für Vision-Aufgaben:
Merkmale:
Der einfachste Weg, Ihre Trainingsskripte mit PyTorch-Ignite zu erstellen:
GitHub-Probleme: Fragen, Fehlerberichte, Funktionsanfragen usw.
Discuss.PyTorch, Kategorie „Ignite“.
PyTorch-Ignite Discord Server: zum Chatten mit der Community
GitHub-Diskussionen: allgemeine bibliotheksbezogene Diskussionen, Ideen, Fragen und Antworten usw.
Wir haben ein Formular für „Benutzer-Feedback“ erstellt. Wir freuen uns über jede Art von Feedback und möchten unsere Community so sehen:
Danke schön!
Weitere Informationen finden Sie in den Beitragsrichtlinien.
PRs sind wie immer willkommen :)
Weitere Projekte finden Sie unter „Verwendet von“
Wenn Ihr Projekt ein Papier implementiert, andere Anwendungsfälle darstellt, die nicht in unseren offiziellen Tutorials oder dem Code des Kaggle-Wettbewerbs behandelt werden, oder einfach nur Ihr Code interessante Ergebnisse liefert und Ignite verwendet. Wir würden Ihr Projekt gerne zu dieser Liste hinzufügen. Senden Sie uns daher bitte eine PR mit einer kurzen Beschreibung des Projekts.
Wenn Sie PyTorch-Ignite in einer wissenschaftlichen Publikation verwenden, würden wir uns über Zitate zu unserem Projekt freuen.
@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 ist ein mit NumFOCUS verbundenes Projekt, das von Freiwilligen der PyTorch-Community in ihrer Eigenschaft als Einzelpersonen (und nicht als Vertreter ihrer Arbeitgeber) betrieben und gepflegt wird. Auf der Seite „Über uns“ finden Sie eine Liste der wichtigsten Mitwirkenden. Bei Fragen und Problemen zur Nutzung sehen Sie sich bitte die verschiedenen Kanäle hier an. Für alle anderen Fragen und Anfragen senden Sie bitte eine E-Mail an [email protected].