Skip to content
Snippets Groups Projects
Select Git revision
  • 75e753f37253a4de95f8ebb70f01882d6ac2981a
  • main default protected
2 results

helper_evaluation.py

Blame
  • helper_evaluation.py 2.30 KiB
    # imports from installed libraries
    import os
    import numpy as np
    import random
    import torch
    from distutils.version import LooseVersion as Version
    from itertools import product
    from tqdm import tqdm
    
    def set_all_seeds(seed):
        os.environ["PL_GLOBAL_SEED"] = str(seed)
        random.seed(seed)
        np.random.seed(seed)
        torch.manual_seed(seed)
        torch.cuda.manual_seed_all(seed)
    
    
    def set_deterministic():
        if torch.cuda.is_available():
            torch.backends.cudnn.benchmark = False
            torch.backends.cudnn.deterministic = True
    
        if torch.__version__ <= Version("1.7"):
            torch.set_deterministic(True)
        else:
            torch.use_deterministic_algorithms(True)
    
    
    def compute_accuracy(model, data_loader, device):
    
        with torch.no_grad():
    
            correct_pred, num_examples = 0, 0
    
            for i, (features, targets) in enumerate(tqdm(data_loader)):
    
                features = features.to(device)
                targets = targets.float().to(device)
    
                logits = model(features)
                _, predicted_labels = torch.max(logits, 1)
    
                num_examples += targets.size(0)
                correct_pred += (predicted_labels == targets).sum()
        return correct_pred.float()/num_examples * 100
    
    
    def compute_confusion_matrix(model, data_loader, device):
    
        all_targets, all_predictions = [], []
        with torch.no_grad():
    
            for i, (features, targets) in enumerate(data_loader):
    
                features = features.to(device)
                targets = targets
                logits = model(features)
                _, predicted_labels = torch.max(logits, 1)
                all_targets.extend(targets.to('cpu'))
                all_predictions.extend(predicted_labels.to('cpu'))
    
        all_predictions = all_predictions
        all_predictions = np.array(all_predictions)
        all_targets = np.array(all_targets)
            
        class_labels = np.unique(np.concatenate((all_targets, all_predictions)))
        if class_labels.shape[0] == 1:
            if class_labels[0] != 0:
                class_labels = np.array([0, class_labels[0]])
            else:
                class_labels = np.array([class_labels[0], 1])
        n_labels = class_labels.shape[0]
        lst = []
        z = list(zip(all_targets, all_predictions))
        for combi in product(class_labels, repeat=2):
            lst.append(z.count(combi))
        mat = np.asarray(lst)[:, None].reshape(n_labels, n_labels)
        return mat