🙈Pythorch点火って何?🙉!!


🤔 Boilerplateとは?


テンプレートのような感じで、重複コードを入力する必要がなく、重複しないことができます.これがボイラーボードです.pytorch ignitは,深さ学習の分野では,符号化モデルの時間に比べて付加要素の符号化(トレーナー,データセットなど)に時間がかかるため,再利用可能なコードを作成する必要があることを意味する.
(左)ignitを使用するコード(右)通常コード

🤩 IGNITE YOUR NETWORKS!


Pythorch-inightは、モデルのトレーニングと更新のすべてのプロセスを提供するライブラリであり、これに関連する方法を提供し、清潔さと再利用性を維持します.igniterの本質はignite.engine.Engineからなり,Engineは入力の演算を繰り返す役割を果たす.
while epoch < max_epochs:
    # run an epoch on data
    data_iter = iter(data)
    while True:
        try:
            batch = next(data_iter)
            output = process_function(batch)
            iter_counter += 1
        except StopIteration:
            data_iter = iter(data)

        if iter_counter == epoch_length:
            break
上のコードはEngineの意味を表しています.

🚗 Engine

Engineは簡単に思いつきました.勉強を続けた部分を学生に返します.自動車のエンジンのようです.Engineの使い方はignite.engine.engine.Engine(process_function)です.process_functionは、フィードフォワード、損失計算、逆伝搬計算、勾配設計などを含むユーザが直接符号化する部分である.次のコードは、基本的なトレーニングを作成する例です.
def update_model(engine, batch): # process function
    inputs, targets = batch
    optimizer.zero_grad()
    outputs = model(inputs)
    loss = criterion(outputs, targets)
    loss.backward()
    optimizer.step()
    return loss.item()

trainer = Engine(update_model) # ignite.engine.engine.Engine()의 형식

@trainer.on(Events.ITERATION_COMPLETED(every=100)) # event
def log_training(engine):
    batch_loss = engine.state.output
    lr = optimizer.param_groups[0]['lr']
    e = engine.state.epoch
    n = engine.state.max_epochs
    i = engine.state.iteration
    print(f"Epoch {e}/{n} : {i} - batch loss: {batch_loss}, lr: {lr}")

trainer.run(data_loader, max_epochs=5) # Engine은 간단하게 .run()으로 돌릴 수 있다.

> Epoch 1/5 : 100 - batch loss: 0.10874069479016124, lr: 0.01
> ...
> Epoch 2/5 : 1700 - batch loss: 0.4217900575859437, lr: 0.01
次のコードはevaluatorのサンプルコードです.
from ignite.metrics import Accuracy

def predict_on_batch(engine, batch)
    model.eval()
    with torch.no_grad():
        x, y = prepare_batch(batch, device=device, non_blocking=non_blocking)
        y_pred = model(x)

    return y_pred, y

evaluator = Engine(predict_on_batch)
Accuracy().attach(evaluator, "val_acc")
evaluator.run(val_dataloader)

🥳 EVENT


基本列車フロー
Pytoch ignitは、Engineの効率と柔軟性を向上させるためにEVENTシステムを導入した.たとえば
  • STARTED:エンジン起動時に発生するイベント
  • EPOCH STARTED:Epoch起動時に発生するイベント
  • GET BATCH STARTED:次の展開前に発生したイベントを取得
    など、たくさんのイベントが存在します.したがって、ユーザは、自分で定義したコードをイベントハンドラとして実行することができる.handlerは、lambda、function、class methodなどのすべての関数であってもよい.Pythorch ignitには多くのイベントがあり、関数を登録するだけで簡単に行えます.
  • Event Handlerは、add_event_handler関数を使用して記述することができる.サンプルコードを次に示します.
    def run_validation(engine, validation_engine, valid_loader):
    validation_engine.run(valid_loader, max_epoch=1)
    
    train_engine.add_event_handler(
    	Events.EPOCH_COMPLETED,
        run_validation,
        validation_engine,
        valid_loader,
    次にdecoratorを使用してEvent call-back関数を記述する例を示します.
    @train_engine.on(Events.EPOCH_COMPLETED)
    def print_train_logs(engine):
    	avg_p_norm = engine.state.metrics['|param|']
        avg_g_norm = engine.state.metrics['|g_param|']
        avg_loss = engine.state.metrics['loss']
        avg_accuracy = engine.state.metrics['accuracy']
        
        print('Epoch {} - |param|={:.2e} |g_param|={:.2e} loss={}, accuracy={}'
        engine.state.epoch,
        avg_p_norm,
        avg_g_norm,
        avg_loss,
        avg_accuracy,
        ))
    次に、類似のライブラリpytorch照明について説明します.