KondetiAravind's picture
Deploy PathoVerse AI inference backend
2a146da
Raw History Blame Contribute Delete
1.48 kB
from __future__ import annotations
import numpy as np
import torch
from torch.utils.data import DataLoader, TensorDataset
from .metrics import (
ClassificationMetrics,
compute_classification_metrics,
)
def evaluate_classifier(
model: torch.nn.Module,
embeddings: np.ndarray,
labels: np.ndarray,
device: str = "cuda:0",
batch_size: int = 256,
) -> ClassificationMetrics:
model.eval()
x = torch.from_numpy(
embeddings
).float()
y = torch.from_numpy(
labels
).long()
dataset = TensorDataset(
x,
y,
)
loader = DataLoader(
dataset,
batch_size=batch_size,
shuffle=False,
)
all_probabilities = []
all_labels = []
with torch.inference_mode():
for batch_x, batch_y in loader:
batch_x = batch_x.to(
device
)
logits = model(
batch_x
)
probabilities = torch.softmax(
logits,
dim=1,
)[:, 1]
all_probabilities.append(
probabilities.cpu().numpy()
)
all_labels.append(
batch_y.numpy()
)
probabilities = np.concatenate(
all_probabilities
)
labels = np.concatenate(
all_labels
)
return compute_classification_metrics(
labels=labels,
probabilities=probabilities,
)