・ ・ |
Ignite adalah perpustakaan tingkat tinggi untuk membantu melatih dan mengevaluasi jaringan saraf di PyTorch secara fleksibel dan transparan.
Klik pada gambar untuk melihat kode lengkap
Lebih sedikit kode dibandingkan PyTorch murni sekaligus memastikan kontrol dan kesederhanaan maksimum
Pendekatan perpustakaan dan tidak ada inversi kontrol program - Gunakan penyalaan di mana dan kapan pun Anda membutuhkannya
API yang dapat diperluas untuk metrik, pengelola eksperimen, dan komponen lainnya
Ignite adalah perpustakaan yang menyediakan tiga fitur tingkat tinggi:
Tidak ada lagi pengkodean for/while
loop pada zaman dan iterasi. Pengguna membuat instance mesin dan menjalankannya.
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 )
Hal yang keren tentang handler adalah mereka menawarkan fleksibilitas yang tak tertandingi (dibandingkan dengan, misalnya, callback). Penangan dapat berupa fungsi apa pun: misalnya lambda, fungsi sederhana, metode kelas, dll. Oleh karena itu, kami tidak perlu mewarisi antarmuka dan mengganti metode abstraknya yang dapat menambah jumlah kode dan kompleksitasnya secara tidak perlu.
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 ():
# ...
Acara dapat ditumpuk bersama untuk mengaktifkan beberapa panggilan:
@ trainer . on ( Events . COMPLETED | Events . EPOCH_COMPLETED ( every = 10 ))
def run_validation ():
# ...
Peristiwa khusus yang terkait dengan panggilan langkah mundur dan pengoptimal:
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 ):
# ...
Metrik untuk berbagai tugas: Presisi, Perolehan Kembali, Akurasi, Matriks Kebingungan, IoU, dll, ~20 metrik regresi.
Pengguna juga dapat menyusun metrik mereka dengan mudah dari metrik yang sudah ada menggunakan operasi aritmatika atau metode obor.
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" )
Dari pip:
pip install pytorch-ignite
Dari conda:
conda install ignite -c pytorch
Dari sumber:
pip install git+https://github.com/pytorch/ignite
Dari pip:
pip install --pre pytorch-ignite
Dari conda (ini menyarankan untuk menginstal rilis malam pytorch alih-alih versi stabil sebagai ketergantungan):
conda install ignite -c pytorch-nightly
Tarik image buruh pelabuhan yang sudah dibuat sebelumnya dari Docker Hub kami dan jalankan dengan docker v19.03+.
docker run --gpus all -it -v $PWD :/workspace/project --network=host --shm-size 16G pytorchignite/base:latest /bin/bash
Basis
pytorchignite/base:latest
pytorchignite/apex:latest
pytorchignite/hvd-base:latest
pytorchignite/hvd-apex:latest
pytorchignite/msdp-apex:latest
Penglihatan:
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
Untuk lebih jelasnya, lihat di sini.
Beberapa petunjuk untuk Anda mulai:
Terinspirasi oleh torchvision/referensi, kami memberikan beberapa dasar yang dapat direproduksi untuk tugas vision:
Fitur:
Cara termudah untuk membuat skrip pelatihan Anda dengan PyTorch-Ignite:
Masalah GitHub: pertanyaan, laporan bug, permintaan fitur, dll.
Diskusikan.PyTorch, kategori "Ignite".
Server Perselisihan PyTorch-Ignite: untuk mengobrol dengan komunitas
Diskusi GitHub: diskusi terkait perpustakaan umum, ide, tanya jawab, dll.
Kami telah membuat formulir untuk "umpan balik pengguna". Kami menghargai masukan apa pun, dan kami ingin melihat komunitas kami seperti ini:
Terima kasih!
Silakan lihat pedoman kontribusi untuk informasi lebih lanjut.
Seperti biasa, PR dipersilakan :)
Lihat proyek lainnya di "Digunakan oleh"
Jika proyek Anda mengimplementasikan makalah, mewakili kasus penggunaan lain yang tidak tercakup dalam tutorial resmi kami, kode kompetisi Kaggle, atau hanya kode Anda yang menyajikan hasil menarik dan menggunakan Ignite. Kami ingin menambahkan proyek Anda ke daftar ini, jadi kirimkan PR dengan penjelasan singkat tentang proyek tersebut.
Jika Anda menggunakan PyTorch-Ignite dalam publikasi ilmiah, kami akan sangat menghargai kutipan untuk proyek kami.
@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 adalah Proyek Afiliasi NumFOCUS, dioperasikan dan dikelola oleh sukarelawan di komunitas PyTorch dalam kapasitas mereka sebagai individu (dan bukan sebagai perwakilan perusahaan mereka). Lihat halaman "Tentang kami" untuk daftar kontributor inti. Untuk pertanyaan dan masalah penggunaan, silakan lihat berbagai saluran di sini. Untuk semua pertanyaan dan permintaan lainnya, silakan kirim email ke [email protected].