Source code for mixmo.utils.visualize

"""
Calibration and image printing utility functions
"""

import matplotlib.pyplot as plt
import torchvision
import numpy as np

__all__ = ['make_image', 'show_batch', 'write_calibration']


[docs]def write_calibration( avg_confs_in_bins, acc_in_bin_list, prop_bin, min_bin, max_bin, min_pred=0, write_file=None, suffix="" ): """ Utility function to show calibration through a histogram of classifier confidences """ fig, ax1 = plt.subplots() ax1.plot([min_pred, 1], [min_pred, 1], "k:", label="Perfectly calibrated") ax1.plot(avg_confs_in_bins, acc_in_bin_list, "s-", label="%s" % ("Discriminator Calibration")) if write_file: suffix = write_file.split("/")[-1].split(".")[0].split("_")[0] + "_" + suffix ax1.set_xlabel(f"Mean predicted value {suffix}") ax1.set_ylabel("Accuracy") ymin = min(acc_in_bin_list + [min_pred]) ax1.set_ylim([ymin, 1.0]) ax1.legend(loc="lower right") ax2 = ax1.twinx() ax2.hlines(prop_bin, min_bin, max_bin, label="%s" % ("Proportion in each bin"), color="r") ax2.set_ylabel("Proportion") ax2.legend(loc="upper center") if not write_file: plt.tight_layout() plt.show() else: fig.savefig( write_file )
[docs]def make_image(img, mean=None, std=None, normalize=True): """ Transform a CIFAR numpy image into a pytorch image (need to swap dimensions) """ if mean is None and std is None: from mixmo.augmentations.standard_augmentations import cifar_mean, cifar_std mean = cifar_mean std = cifar_std npimg = img.numpy().copy() if normalize: for i in range(0, 3): npimg[i] = npimg[i] * std[i] + mean[i] # unnormalize return np.transpose(npimg, (1, 2, 0))
[docs]def show_batch(images, normalize=True): """ Plot images in a batch of images """ images = make_image(torchvision.utils.make_grid(images), normalize=normalize) plt.imshow(images) plt.show() return images