Flamekizer11's picture
Upload 27 files
64d0ccc verified
Raw
History Blame Contribute Delete
1.31 kB
import torch
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, classification_report
from model import build_model
from dataloader import get_dataloaders
from utils import get_device
CSV_PATH = "data_processed/metadata_final.csv"
IMG_DIR = "data_processed/images"
CHECKPOINT_PATH = "checkpoints/best_model.pth"
device = get_device()
df = pd.read_csv(CSV_PATH)
num_classes = df["label_id"].nunique()
model = build_model(num_classes, device)
model.load_state_dict(torch.load(CHECKPOINT_PATH))
model.eval()
_, val_loader = get_dataloaders(
csv_path=CSV_PATH,
images_dir=IMG_DIR,
batch_size=32
)
y_true, y_pred = [], []
with torch.no_grad():
for images, labels in val_loader:
images = images.to(device)
outputs = model(images)
preds = outputs.argmax(dim=1).cpu().numpy()
y_pred.extend(preds)
y_true.extend(labels.numpy())
cm = confusion_matrix(y_true, y_pred)
plt.figure(figsize=(14, 12))
sns.heatmap(cm, cmap="Blues", xticklabels=False, yticklabels=False)
plt.title("Confusion Matrix")
plt.xlabel("Predicted")
plt.ylabel("True")
plt.show()
print("\nClassification Report:")
print(classification_report(y_true, y_pred))