Skip to content

PyTorch - Visualization of Convents

PyTorch - Visualizing Image Data for ConvNets

Section titled “PyTorch - Visualizing Image Data for ConvNets”

Understanding and visualizing your input data is a crucial first step in any deep learning project, especially when working with Convolutional Neural Networks (ConvNets) for image tasks. This chapter demonstrates how to load a standard dataset like MNIST using torchvision and visualize some of its images using matplotlib.

We’ll need torch, torchvision for datasets and image transformations, and matplotlib.pyplot for plotting.

import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np # For converting tensors to numpy arrays for plotting

torchvision.datasets provides easy access to popular datasets like MNIST, CIFAR10, etc. We’ll also use torch.utils.data.DataLoader to iterate over the data in batches. transforms.ToTensor() converts PIL Images or NumPy ndarrays into PyTorch Tensors and scales pixel values to [0.0, 1.0].

# Define transformations for the dataset
# ToTensor() converts a PIL Image or numpy.ndarray to a FloatTensor.
# It also scales the image's pixel intensity values in the range [0., 1.]
transform = transforms.Compose([
transforms.ToTensor(),
# You can add other transforms like Normalize if needed for your model
# transforms.Normalize((0.5,), (0.5,)) # Example for single channel, (mean,), (std,)
])
# Load the MNIST training dataset
# download=True will download the dataset if not found in root directory
train_dataset = torchvision.datasets.MNIST(root='./data',
train=True,
transform=transform,
download=True)
# Create a DataLoader to iterate over the dataset
# batch_size defines how many samples are loaded per batch
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
batch_size=4,
shuffle=True) # Shuffle for better training

This code downloads the MNIST dataset (if not already present in the ./data directory), applies the defined transformations, and prepares a data loader.

Now, let’s fetch a batch of images from our train_loader and display them.

# Function to show an image
def imshow(img_tensor, title=None):
"""Imshow for Tensor."""
# PyTorch tensors are typically (C, H, W)
# Matplotlib expects (H, W, C) or (H, W) for grayscale
img_numpy = img_tensor.numpy() # Convert tensor to numpy array
# If it's a color image, transpose channels. For grayscale (1, H, W), squeeze the channel dim.
if img_numpy.shape[0] == 1: # Grayscale
plt.imshow(np.squeeze(img_numpy), cmap='gray')
else: # Color
plt.imshow(np.transpose(img_numpy, (1, 2, 0)))
if title is not None:
plt.title(title)
plt.axis('off') # Hide axes
# Get a batch of training data
data_iter = iter(train_loader)
images, labels = next(data_iter) # In Python 3, next(data_iter) is preferred over data_iter.next()
# Create a grid of images and display them
# torchvision.utils.make_grid takes a batch of images (B, C, H, W)
# and arranges them into a grid image.
img_grid = torchvision.utils.make_grid(images)
plt.figure(figsize=(8, 2)) # Adjust figure size as needed
imshow(img_grid, title=[str(x.item()) for x in labels])
plt.show()
# To display a single image from the batch:
# plt.figure()
# imshow(images[0], title=f"Label: {labels[0].item()}")
# plt.show()

This code snippet will display a grid of a few images from the MNIST dataset along with their corresponding labels. Visualizing your data helps you confirm that it’s loaded correctly and understand its characteristics before feeding it into a ConvNet. For more advanced visualizations, such as model activations or feature maps, tools like TensorBoard are commonly used in conjunction with PyTorch.