🙈Pythorch点火って何?🙉!!
14141 ワード
🤔 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システムを導入した.たとえばなど、たくさんのイベントが存在します.したがって、ユーザは、自分で定義したコードをイベントハンドラとして実行することができる.handlerは、lambda、function、class methodなどのすべての関数であってもよい.Pythorch ignitには多くのイベントがあり、関数を登録するだけで簡単に行えます.
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照明について説明します.Reference
この問題について(🙈Pythorch点火って何?🙉!!), 我々は、より多くの情報をここで見つけました https://velog.io/@sanha9999/Pytorch-ignite가-뭐야テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol