Utvärdering av Modellen
Svep för att visa menyn
Förberedelse för utvärdering
Innan utvärderingsprocessen på testuppsättningen påbörjas, behöver följande säkerställas:
-
Sätt modellen i utvärderingsläge: använd
model.eval()för att stänga av funktioner som dropout och batchnormalisering, vilket säkerställer konsekvent beteende under utvärdering; -
Inaktivera gradientspårning: använd
torch.no_grad()för att spara minne och snabba upp beräkningar, eftersom gradienter inte behövs vid utvärdering.
# Set the model to evaluation mode
model.eval()
# Disable gradient computation for evaluation
with torch.no_grad():
# Forward pass on the test data
test_predictions = model(X_test)
Omvandla prediktioner
Som tidigare nämnts kommer modellens utdata att vara logits (råpoäng). För att erhålla de förutsagda klassetiketterna används torch.argmax för att extrahera indexet för det högsta värdet längs klassdimensionen.
# Convert logits to predicted class labels
predicted_labels = torch.argmax(test_predictions, dim=1)
Beräkning av mått
För klassificeringsproblem är noggrannhet ett användbart startmått, förutsatt att datasettet är balanserat.
# Calculate accuracy
correct_predictions = (predicted_labels == y_test).sum().item()
accuracy = correct_predictions / len(y_test) * 100
print(f"Test accuracy: {accuracy:.2f}%")
När datasettet är obalanserat — det vill säga när en klass är betydligt större än de andra — kan noggrannhet vara missvisande. En modell som alltid förutspår majoritetsklassen kan uppnå hög noggrannhet, men misslyckas med att återge den verkliga prestandan över alla klasser.
För att få djupare insikter i modellens prestanda kan du beräkna ytterligare mått såsom precision, återkallelse och F1-poäng. Du kan läsa mer om dessa mått och deras formler i denna artikel, med hjälp av deras respektive formler.
Fullständig implementering
123456789101112131415161718import torch import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/1dd2b0f6-6ec0-40e6-a570-ed0ac2209666/section_3/model_training.py 2>/dev/null') from model_training import model, X_test, y_test # Set model to evaluation mode model.eval() # Disable gradient tracking with torch.no_grad(): # Forward pass test_predictions = model(X_test) # Get predicted classes predicted_labels = torch.argmax(test_predictions, dim=1) # Calculate accuracy correct_predictions = (predicted_labels == y_test).sum().item() accuracy = correct_predictions / len(y_test) * 100 print(f"Test accuracy: {accuracy:.2f}%")
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal