Skip to main content

Dataset-to-Tensor Transformation


Dataset Transforms in PyTorch

When working with image datasets in PyTorch, one of the essential tasks is transforming the image data into a format that the model can process. A common operation is converting a PIL (Python Imaging Library) image into a PyTorch tensor. This can be done efficiently using the torchvision.transforms module.


1. Introduction to Dataset Transformations

The torchvision.transforms module provides a collection of functions designed for image transformations. These transformations can be applied to images after they are loaded, but before they are returned by the dataset's __getitem__ method. This allows us to preprocess images in various ways, including converting them into PyTorch tensors, normalizing pixel values, rotating, or cropping the images.


2. Available Transforms

The torchvision.transforms module contains a variety of transformations that can be applied to datasets like CIFAR-10. Some commonly used transforms include:

  • ToTensor(): Converts images (either PIL images or NumPy arrays) into PyTorch tensors.
  • Normalize(): Normalizes the image tensor to a specified mean and standard deviation.
  • RandomRotation(): Randomly rotates the image by a specified degree.
  • RandomAffine(): Applies random affine transformations like translation and scaling.

You can view all available transforms by calling dir(transforms).


3. Using ToTensor() Transform

The ToTensor() transform converts images to PyTorch tensors. When this transform is applied, it:

  • Converts the image to a tensor with the shape (C, H, W)</, where C is the number of channels (e.g., 3 for RGB), H is the height, and W is the width.
  • Scales pixel values from their original 0-255 range to the 0.0-1.0 range (floating-point).

Example Code:

from torchvision import transforms

to_tensor = transforms.ToTensor()
img_t = to_tensor(img)  # img is a PIL image
print(img_t.shape)  # Output: torch.Size([3, 32, 32])
    

In this example, the img (a PIL image) is transformed into a tensor of shape (3, 32, 32), where 3 represents the RGB channels and 32x32 is the image size.


4. Integrating Transforms with Datasets

You can apply transforms directly while loading datasets. For example, applying ToTensor() during dataset loading ensures that images are automatically converted into tensors.

Example Code:

from torchvision import datasets

tensor_cifar10 = datasets.CIFAR10(data_path, train=True, download=True,
                                  transform=transforms.ToTensor())
    

Now, when you access an element from the dataset (e.g., tensor_cifar10[99]), it will return a tensor instead of a PIL image.

Checking the Returned Data:

img_t, _ = tensor_cifar10[99]  # Extract the image tensor and its label (ignored here)
print(type(img_t))  # Output: 
print(img_t.shape, img_t.dtype)  # Output: torch.Size([3, 32, 32]), torch.float32

    

5. Pixel Value Normalization

The ToTensor() transform scales pixel values from the original 0-255 range (8-bit per channel) to the 0.0-1.0 range. This is essential for neural networks, as it standardizes input values.

Verifying the Normalization:

print(img_t.min(), img_t.max())  # Output: tensor(0.), tensor(1.)
    

6. Visualizing the Transformed Image

After transforming the image into a tensor, you can visualize it using Matplotlib. However, since PyTorch tensors have a shape of (C, H, W) and Matplotlib expects (H, W, C), you need to use the permute() function to rearrange the dimensions.

Example Code:

import matplotlib.pyplot as plt

# Permute to change the order from (C, H, W) to (H, W, C)
plt.imshow(img_t.permute(1, 2, 0))
plt.show()
    

7. Conclusion

The torchvision.transforms module provides powerful tools for preprocessing image data. By using transforms like ToTensor(), you can easily convert PIL images into PyTorch tensors, apply normalization, and prepare data for training deep learning models.


Further Reading


People are good at skipping over material they already know!

View Related Topics to







Contact Us

Name

Email *

Message *

Popular Posts

Simulation of ASK, FSK, and PSK using MATLAB Simulink (with Online Simulator)

📘 Overview 🧮 How to use MATLAB Simulink 🧮 Simulation of ASK using MATLAB Simulink 🧮 Simulation of FSK using MATLAB Simulink 🧮 Simulation of PSK using MATLAB Simulink 🧮 Simulator for ASK, FSK, and PSK 🧮 Digital Signal Processing Simulator 📚 Further Reading ASK, FSK & PSK HomePage MATLAB Simulation Simulation of Amplitude Shift Keying (ASK) using MATLAB Simulink In Simulink, we pick different components/elements from MATLAB Simulink Library. Then we connect the components and perform a particular operation. Result A sine wave source, a pulse generator, a product block, a mux, and a scope are shown in the diagram above. The pulse generator generates the '1' and '0' bit sequences. Sine wave sources produce a specific amplitude and frequency. The scope displays the modulated signal as well as the original bit sequence created by the pulse generator. Mux i...

BER vs SNR for M-ary QAM, M-ary PSK, QPSK, BPSK, ...(MATLAB Code + Simulator)

Bit Error Rate (BER) & SNR Guide Analyze communication system performance with our interactive simulators and MATLAB tools. 📘 Theory 🧮 Simulators 💻 MATLAB Code 📚 Resources BER Definition SNR Formula BER Calculator MATLAB Comparison 📂 Explore M-ary QAM, PSK, and QPSK Topics ▼ 🧮 Constellation Simulator: M-ary QAM 🧮 Constellation Simulator: M-ary PSK 🧮 BER calculation for ASK, FSK, and PSK 🧮 Approaches to BER vs SNR What is Bit Error Rate (BER)? The BER indicates how many corrupted bits are received compared to the total number of bits sent. It is the primary figure of merit for a...

Antenna Gain-Combining Methods - EGC, MRC, SC, and RMSGC

📘 Overview 🧮 Equal gain combining (EGC) 🧮 Maximum ratio combining (MRC) 🧮 Selective combining (SC) 🧮 Root mean square gain combining (RMSGC) 🧮 Zero-Forcing (ZF) Combining 🧮 MATLAB Code 📚 Further Reading  There are different antenna gain-combining methods. They are as follows. 1. Equal gain combining (EGC) 2. Maximum ratio combining (MRC) 3. Selective combining (SC) 4. Root mean square gain combining (RMSGC) 5. Zero-Forcing (ZF) Combining  1. Equal gain combining method Equal Gain Combining (EGC) is a diversity combining technique in which the receiver aligns the phase of the received signals from multiple antennas (or channels) but gives them equal amplitude weight before summing. This means each received signal is phase-corrected to be coherent with others, but no scaling is applied based on signal strength or channel quality (unlike MRC). Mathematically, for received signa...

Constellation Diagrams of ASK, PSK, and FSK (with MATLAB Code + Simulator)

Constellation Diagrams: ASK, FSK, and PSK Comprehensive guide to signal space representation, including interactive simulators and MATLAB implementations. 📘 Overview 🧮 Simulator ⚖️ Theory 📚 Resources Definitions Constellation Tool Key Points MATLAB Code 📂 Other Topics: M-ary PSK & QAM Diagrams ▼ 🧮 Simulator for M-ary PSK Constellation 🧮 Simulator for M-ary QAM Constellation BASK (Binary ASK) Modulation Transmits one of two signals: 0 or -√Eb, where Eb​ is the energy per bit. These signals represent binary 0 and 1. BFSK (Binary FSK) Modulation Transmits one ...

Coherence Bandwidth and Coherence Time (with MATLAB + Simulator)

🧮 Coherence Bandwidth 🧮 Coherence Time 🧮 MATLAB Code s 📚 Further Reading For Doppler Delay or Multi-path Delay Coherence time T coh ∝ 1 / v max (For slow fading, coherence time T coh is greater than the signaling interval.) Coherence bandwidth W coh ∝ 1 / Ï„ max (For frequency-flat fading, coherence bandwidth W coh is greater than the signaling bandwidth.) Where: T coh = coherence time W coh = coherence bandwidth v max = maximum Doppler frequency (or maximum Doppler shift) Ï„ max = maximum excess delay (maximum time delay spread) Notes: The notation v max −1 and Ï„ max −1 indicate inverse proportionality. Doppler spread refers to the range of frequency shifts caused by relative motion, determining T coh . Delay spread (or multipath delay spread) determines W coh . Frequency-flat fading occurs when W coh is greater than the signaling bandwidth. Coherence Bandwidth Coherence bandwidth is...

OFDM Symbols and Subcarriers Explained

This article explains how OFDM (Orthogonal Frequency Division Multiplexing) symbols and subcarriers work. It covers modulation, mapping symbols to subcarriers, subcarrier frequency spacing, IFFT synthesis, cyclic prefix, and transmission. Step 1: Modulation First, modulate the input bitstream. For example, with 16-QAM , each group of 4 bits maps to one QAM symbol. Suppose we generate a sequence of QAM symbols: s0, s1, s2, s3, s4, s5, …, s63 Step 2: Mapping Symbols to Subcarriers Assume N sub = 8 subcarriers. Each OFDM symbol in the frequency domain contains 8 QAM symbols (one per subcarrier): Mapping (example) OFDM symbol 1 → s0, s1, s2, s3, s4, s5, s6, s7 OFDM symbol 2 → s8, s9, s10, s11, s12, s13, s14, s15 … OFDM sym...

BER performance of QPSK with BPSK, 4-QAM, 16-QAM, 64-QAM, 256-QAM, etc (MATLAB + Simulator)

📘 Overview 📚 QPSK vs BPSK and QAM: A Comparison of Modulation Schemes in Wireless Communication 📚 Real-World Example 🧮 MATLAB Code 📚 Further Reading   QPSK provides twice the data rate compared to BPSK. However, the bit error rate (BER) is approximately the same as BPSK at low SNR values when gray coding is used. On the other hand, QPSK exhibits similar spectral efficiency to 4-QAM and 16-QAM under low SNR conditions. In very noisy channels, QPSK can sometimes achieve better spectral efficiency than 4-QAM or 16-QAM. In practical wireless communication scenarios, QPSK is commonly used along with QAM techniques, especially where adaptive modulation is applied. Modulation Bits/Symbol Points in Constellation Usage Notes BPSK 1 2 Very robust, used in weak signals QPSK 2 4 Balanced speed & reliability 4-QAM ...

ASK, FSK, and PSK (with MATLAB + Online Simulator)

📘 ASK Theory 📘 FSK Theory 📘 PSK Theory 📊 Comparison 🧮 MATLAB Codes 🎮 Simulator ASK or OFF ON Keying ASK is a simple (less complex) Digital Modulation Scheme where we vary the modulation signal's amplitude or voltage by the message signal's amplitude or voltage. We select two levels (two different voltage levels) for transmitting modulated message signals. Example: "+5 Volt" (upper level) and "0 Volt" (lower level). To transmit binary bit "1", the transmitter sends "+5 Volts", and for bit "0", it sends no power. The receiver uses filters to detect whether a binary "1" or "0" was transmitted. Fig 1: Output of ASK, FSK, and PSK modulation using MATLAB for a data stream "1 1 0 0 1 0 1 0" ( Get MATLAB Code ) ...