・ ・ |
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 )
핸들러의 멋진 점은 콜백과 비교할 때 비교할 수 없는 유연성을 제공한다는 것입니다. 핸들러는 람다, 단순 함수, 클래스 메서드 등 어떤 함수라도 될 수 있습니다. 따라서 인터페이스에서 상속하고 코드와 복잡성을 불필요하게 늘릴 수 있는 추상 메서드를 재정의할 필요가 없습니다.
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 릴리스를 종속성으로 설치하는 것이 좋습니다):
conda install ignite -c pytorch-nightly
Docker Hub에서 사전 빌드된 Docker 이미지를 가져와 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/references에서 영감을 받아 비전 작업에 대한 재현 가능한 여러 기준선을 제공합니다.
특징:
PyTorch-Ignite를 사용하여 교육 스크립트를 생성하는 가장 쉬운 방법:
GitHub 문제: 질문, 버그 보고서, 기능 요청 등
Discuss.PyTorch, 카테고리 "Ignite".
PyTorch-Ignite Discord 서버: 커뮤니티와 채팅
GitHub 토론: 일반 도서관 관련 토론, 아이디어, Q&A 등
"사용자 피드백" 양식을 만들었습니다. 우리는 어떤 유형의 피드백에도 감사하며, 우리 커뮤니티를 다음과 같이 보고 싶습니다.
감사합니다!
자세한 내용은 기여 지침을 참조하세요.
언제나처럼 PR도 환영합니다 :)
"사용 대상"에서 다른 프로젝트 보기
프로젝트가 논문을 구현하거나 공식 튜토리얼, Kaggle 경쟁 코드에서 다루지 않은 다른 사용 사례를 나타내거나 코드만 흥미로운 결과를 제시하고 Ignite를 사용하는 경우. 귀하의 프로젝트를 이 목록에 추가하고 싶으니, 프로젝트에 대한 간략한 설명과 함께 PR을 보내주세요.
과학 출판물에서 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]로 이메일을 보내주세요.