import torch import numpy as np import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec def show_images(images, color=False): if color: sqrtimg = int(np.ceil(np.sqrt(images.shape[2]*images.shape[3]))) else: images = np.reshape(images, [images.shape[0], -1]) # images reshape to (batch_size, D) sqrtimg = int(np.ceil(np.sqrt(images.shape[1]))) sqrtn = int(np.ceil(np.sqrt(images.shape[0]))) fig = plt.figure(figsize=(sqrtn, sqrtn)) gs = gridspec.GridSpec(sqrtn, sqrtn) gs.update(wspace=0.05, hspace=0.05) for i, img in enumerate(images): ax = plt.subplot(gs[i]) plt.axis('off') ax.set_xticklabels([]) ax.set_yticklabels([]) ax.set_aspect('equal') if color: plt.imshow(np.swapaxes(np.swapaxes(img, 0, 1), 1, 2)) else: plt.imshow(img.reshape([sqrtimg,sqrtimg])) return def preprocess_img(x): return 2 * x - 1.0 def deprocess_img(x): return (x + 1.0) / 2.0 def rel_error(x,y): return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y)))) def sample_noise(batch_size, dim): """ Generate a PyTorch Tensor of uniform random noise. Input: - batch_size: Integer giving the batch size of noise to generate. - dim: Integer giving the dimension of noise to generate. Output: - A PyTorch Tensor of shape (batch_size, dim) containing uniform random noise in the range (-1, 1). """ to_return = torch.randn((batch_size, dim)) return to_return/torch.max(to_return)