PyTorch Ignite 0.4.2 : 概要

PyTorch Ignite 0.4.2 : 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 02/07/2021 (0.4.2)

* 本ページは、PyTorch Ignite ドキュメントの以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

無料セミナー実施中 クラスキャット主催 人工知能 & ビジネス Web セミナー

人工知能とビジネスをテーマにウェビナー (WEB セミナー) を定期的に開催しています。スケジュールは弊社 公式 Web サイト でご確認頂けます。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • Windows PC のブラウザからご参加が可能です。スマートデバイスもご利用可能です。
クラスキャットは人工知能・テレワークに関する各種サービスを提供しております :

人工知能研究開発支援 人工知能研修サービス テレワーク & オンライン授業を支援
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。)

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/
Facebook: https://www.facebook.com/ClassCatJP/

 

PyTorch Ignite 0.4.2 : 概要

TL;DR

Ignite は柔軟に透過的に PyTorch のニューラルネットワークの訓練と評価に役立つ高位ライブラリです。

 

特徴

  • 最大限の制御と単純性を保証する一方で、純粋な PyTorch よりも少ないコード
  • ライブラリ・アプローチ、そしてプログラムの制御反転はありません – 必要なところと必要なときに ignite を使用してください
  • メトリクス、実験マネージャ、そして他のコンポーネントのための拡張可能な API

 

Why Ignite?

Ignite は 3 つの高位特徴を提供するライブラリです :

  • 非常に単純なエンジンとイベントシステム
  • モデルを容易に評価するための out-of-the-box なメトリクス
  • 訓練パイプラインを構成し、アーティファクトをセーブしてパラメータとメトリクスをログ記録するための組込みハンドラ

 

単純化された訓練と検証ループ

エポック上の 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
    # E.g. 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)

 

イベント & ハンドラのパワー

ハンドラによるクールなことはそれらが (例えばコールバックと比較して) 比類のない柔軟性を提供することです。ハンドラは任意の関数であり得ます: e.g. lambda, 単純な関数、クラスメソッド等。これにより、インターフェイスから継承してその抽象メソッドを override する必要はありません、それは貴方のコードとその複雑さを不必要に増大させる可能性があります。

 

望むときにはいつでも任意の数の関数を実行します

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():
    # ...

 

標準イベントを越えるためのカスタムイベント

backward と optimizer ステップに関連するカスタムイベント :

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):
    # ...

 

Out-of-the-box メトリクス

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")

 

インストール

From pip:

pip install pytorch-ignite

From conda:

conda install ignite -c pytorch

From source:

pip install git+https://github.com/pytorch/ignite

 

Getting Started

Few pointers to get you started:

 

ドキュメント

 

サンプル

サンプルの完全なリストは ここ で見つけられます。

 

チュートリアル

 

以上