・ ・ |
Ignite は、PyTorch でのニューラル ネットワークのトレーニングと評価を柔軟かつ透過的に支援する高レベルのライブラリです。
画像をクリックすると完全なコードが表示されます
最大限の制御とシンプルさを確保しながら、純粋な PyTorch よりもコードが少なくなります
ライブラリ アプローチであり、プログラムの制御反転はありません -必要なときに必要な場所で ignite を使用します
メトリクス、実験マネージャー、その他のコンポーネント用の拡張可能な API
Ignite は、次の 3 つの高レベルの機能を提供するライブラリです。
エポックや反復で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 夜間リリースをインストールすることを示唆しています):
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
NLP:
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] に電子メールを送信してください。