- |
Ignite เป็นไลบรารีระดับสูงที่ช่วยฝึกอบรมและประเมินโครงข่ายประสาทเทียมใน PyTorch อย่างยืดหยุ่นและโปร่งใส
คลิกที่ภาพเพื่อดูรหัสที่สมบูรณ์
รหัสน้อยกว่า PyTorch บริสุทธิ์ ในขณะเดียวกันก็รับประกันการควบคุมและความเรียบง่ายสูงสุด
วิธีการใช้ไลบรารี่และไม่มีการผกผันการควบคุมของโปรแกรม - ใช้ ignite ที่ไหนและเมื่อไหร่ก็ได้ที่คุณต้องการ
API ที่ขยายได้สำหรับหน่วยวัด ตัวจัดการการทดสอบ และส่วนประกอบอื่นๆ
Ignite เป็น ไลบรารี ที่มีคุณสมบัติระดับสูงสามประการ:
ไม่มีการเขียนโค้ด for/while
วนซ้ำในยุคและการวนซ้ำอีกต่อไป ผู้ใช้สร้างอินสแตนซ์ของเครื่องยนต์และเรียกใช้งาน
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 )
สิ่งที่ยอดเยี่ยมสำหรับตัวจัดการคือพวกมันให้ความยืดหยุ่นที่ไม่มีใครเทียบได้ (เมื่อเทียบกับ ตัวอย่างเช่น การโทรกลับ) ตัวจัดการสามารถเป็นฟังก์ชันใดก็ได้: เช่น lambda, ฟังก์ชันอย่างง่าย, วิธีการเรียน ฯลฯ ดังนั้น เราไม่จำเป็นต้องสืบทอดจากอินเทอร์เฟซและแทนที่วิธีนามธรรมซึ่งอาจทำให้โค้ดของคุณเพิ่มจำนวนมากและความซับซ้อนโดยไม่จำเป็น
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 ():
# ...
กิจกรรมสามารถซ้อนกันเพื่อให้สามารถโทรได้หลายครั้ง:
@ trainer . on ( Events . COMPLETED | Events . EPOCH_COMPLETED ( every = 10 ))
def run_validation ():
# ...
เหตุการณ์แบบกำหนดเองที่เกี่ยวข้องกับการเรียกขั้นตอนย้อนกลับและเครื่องมือเพิ่มประสิทธิภาพ:
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 ):
# ...
ตัวชี้วัดสำหรับงานต่างๆ: ความแม่นยำ การเรียกคืน ความแม่นยำ เมทริกซ์ความสับสน IoU ฯลฯ ~20 ตัวชี้วัดการถดถอย
ผู้ใช้ยังสามารถเขียนหน่วยวัดของตนได้อย่างง่ายดายจากหน่วยวัดที่มีอยู่โดยใช้การดำเนินการทางคณิตศาสตร์หรือวิธีคบเพลิง
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" )
จากปิ๊ป:
pip install pytorch-ignite
จากคอนดา:
conda install ignite -c pytorch
จากแหล่งที่มา:
pip install git+https://github.com/pytorch/ignite
จากปิ๊ป:
pip install --pre pytorch-ignite
จาก conda (สิ่งนี้แนะนำให้ติดตั้ง pytorch nightly release แทนที่จะเป็นเวอร์ชันเสถียรเป็นการพึ่งพา):
conda install ignite -c pytorch-nightly
ดึงอิมเมจ Docker ที่สร้างไว้ล่วงหน้าจาก Docker Hub ของเราแล้วรันด้วย Docker v19.03+
docker run --gpus all -it -v $PWD :/workspace/project --network=host --shm-size 16G pytorchignite/base:latest /bin/bash
ฐาน
pytorchignite/base:latest
pytorchignite/apex:latest
pytorchignite/hvd-base:latest
pytorchignite/hvd-apex:latest
pytorchignite/msdp-apex:latest
วิสัยทัศน์:
pytorchignite/vision:latest
pytorchignite/hvd-vision:latest
pytorchignite/apex-vision:latest
pytorchignite/hvd-apex-vision:latest
pytorchignite/msdp-apex-vision:latest
เอ็นแอลพี:
pytorchignite/nlp:latest
pytorchignite/hvd-nlp:latest
pytorchignite/apex-nlp:latest
pytorchignite/hvd-apex-nlp:latest
pytorchignite/msdp-apex-nlp:latest
สำหรับรายละเอียดเพิ่มเติม ดูที่นี่
คำแนะนำบางประการที่จะช่วยให้คุณเริ่มต้น:
ได้รับแรงบันดาลใจจาก torchvision/ข้อมูลอ้างอิง เรามีพื้นฐานที่สามารถทำซ้ำได้หลายประการสำหรับงานด้านการมองเห็น:
คุณสมบัติ:
วิธีที่ง่ายที่สุดในการสร้างสคริปต์การฝึกอบรมของคุณด้วย PyTorch-Ignite:
ปัญหา GitHub: คำถาม รายงานข้อผิดพลาด คำขอคุณสมบัติ ฯลฯ
Discuss.PyTorch หมวดหมู่ "จุดชนวน"
PyTorch-Ignite Discord Server: เพื่อสนทนากับชุมชน
การสนทนา GitHub: การสนทนาทั่วไปเกี่ยวกับห้องสมุด แนวคิด คำถามและคำตอบ ฯลฯ
เราได้สร้างแบบฟอร์มสำหรับ "คำติชมของผู้ใช้" เราขอขอบคุณสำหรับข้อเสนอแนะทุกประเภท และนี่คือวิธีที่เราต้องการเห็นชุมชนของเรา:
ขอบคุณ!
โปรดดูหลักเกณฑ์การบริจาคสำหรับข้อมูลเพิ่มเติม
ยินดีต้อนรับ PRs เช่นเคยครับ :)
ดูโครงการอื่นๆ ได้ที่ “ใช้โดย”
หากโปรเจ็กต์ของคุณใช้กระดาษ แสดงถึงกรณีการใช้งานอื่นๆ ที่ไม่ครอบคลุมในบทช่วยสอนอย่างเป็นทางการของเรา โค้ดของการแข่งขัน Kaggle หรือเพียงโค้ดของคุณนำเสนอผลลัพธ์ที่น่าสนใจและใช้ Ignite เราต้องการเพิ่มโครงการของคุณลงในรายการนี้ ดังนั้นโปรดส่งประชาสัมพันธ์พร้อมคำอธิบายโดยย่อของโครงการ
หากคุณใช้ PyTorch-Ignite ในสิ่งพิมพ์ทางวิทยาศาสตร์ เราขอขอบคุณสำหรับการอ้างอิงถึงโครงการของเรา
@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 เป็นโครงการในเครือของ NumFOCUS ดำเนินการและดูแลโดยอาสาสมัครในชุมชน PyTorch ในฐานะปัจเจกบุคคล (และไม่ใช่ตัวแทนของนายจ้าง) ดูหน้า "เกี่ยวกับเรา" สำหรับรายชื่อผู้ร่วมให้ข้อมูลหลัก หากมีคำถามและปัญหาการใช้งาน โปรดดูช่องทางต่างๆ ที่นี่ สำหรับคำถามและข้อสงสัยอื่นๆ ทั้งหมด โปรดส่งอีเมลไปที่ [email protected]