Modellen evalueren met Accelerator

Efficiënt AI-modellen trainen met PyTorch

Dennis Lee

Data Engineer, Amazon

Waarom een model in evaluatiemodus zetten?

  • Trainingsmodus
    • Dropout: zet neuronen op nul
    • Batchnormalisatie

Dropout en batchnormalisatie Een diagram van een neuraal netwerk met meerdere lagen, inclusief input-, verborgen en outputlagen. Dropout wordt toegepast op de verborgen lagen om overfitting te voorkomen, en batchnormalisatie normaliseert de output van elke laag vóór activatie.

Efficiënt AI-modellen trainen met PyTorch

Waarom een model in evaluatiemodus zetten?

  • Trainingsmodus
    • Dropout: zet neuronen op nul
    • Batchnormalisatie
  • Evaluatiemodus schakelt deze lagen uit
  • model.eval() activeert evaluatiemodus

Dropout en batchnormalisatie Een diagram van een neuraal netwerk met meerdere lagen, inclusief input-, verborgen en outputlagen. Dropout wordt toegepast op de verborgen lagen om overfitting te voorkomen, en batchnormalisatie normaliseert de output van elke laag vóór activatie.

Efficiënt AI-modellen trainen met PyTorch

Gradiënten uitschakelen met torch.no_grad()

  • Training vereist gradiënten
  • torch.no_grad() schakelt gradiënten uit
  • Gebruik zowel model.eval als torch.no_grad:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

Gradiënten berekenen bij backpropagation Een diagram van een neuraal netwerk dat het backpropagation-proces toont, waar gradiënten per laag worden berekend om gewichten aan te passen. Het laat zien hoe fouten terugstromen van de outputlaag via de verborgen lagen om gewichten te updaten met gradient descent.

Efficiënt AI-modellen trainen met PyTorch

Maak een validatieset

  • Laad de validatieset van de MRPC-dataset
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • Tokenizeer de validatieset
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
Efficiënt AI-modellen trainen met PyTorch

Leven van een epoch: train- en evaluatielussen

  • Per epoch: loop over train- en validatieset
  • Eerst het model in trainingsmodus
  • Daarna in evaluatiemodus en metrics loggen
for epoch in range(num_epochs):

model.train() for step, batch in enumerate(train_dataloader): # Perform training step
model.eval() for step, batch in enumerate(eval_dataloader): # Perform evaluation step
# Log evaluation metrics
Efficiënt AI-modellen trainen met PyTorch

Binnen de evaluatielus

metric = evaluate.load("glue", "mrpc")
model.eval()
for step, batch in enumerate(eval_dataloader):

with torch.no_grad(): outputs = model(**batch) predictions = outputs.logits.argmax(dim=-1)
predictions, references = accelerator.gather_for_metrics((predictions, batch["labels"]))
metric.add_batch(predictions=predictions, references=references)
eval_metric = metric.compute() print(f"Eval metrics: \n{eval_metric}")
Eval metrics: 
{'accuracy': 0.81, 'f1': 0.77}
Efficiënt AI-modellen trainen met PyTorch

Metrics loggen na evaluatie

  • Trackingtools: notebooks die metrics loggen; bv. TensorBoard en MLflow
  • log_with: gebruik alle experimenttrackingtools
  • .init_trackers(): initialiseer trackingtools
  • .log(): track accuracy, f1, epoch
  • .end_training(): tracking afronden
accelerator = Accelerator(project_dir=".",
                          log_with="all")

accelerator.init_trackers("my_project")
for epoch in range(num_epochs): # Training loop is here # Evaluation loop is here accelerator.log({
"accuracy": eval_metric["accuracy"], "f1": eval_metric["f1"],
}, step=epoch)
accelerator.end_training()
Efficiënt AI-modellen trainen met PyTorch

Laten we oefenen!

Efficiënt AI-modellen trainen met PyTorch

Preparing Video For Download...