Загрузчики данных DataLoader

Последнее обновление: 13.12.2025

DataSet извлекает признаки и метки из набора данных по одному образцу за раз. Но при обучении модели образцы обычно передаются небольшими пакетами (batch) - нейросети обучаются гораздо эффективнее, когда видят сразу 64 или 128 картинок за раз, а не по одной. Что к тому же позволяет использовать многопроцессорную обработку Python для ускорения извлечения данных. И для удобной загрузки пакетами применяются специальные объекты - загрузчики данных (dataloader)

В PyTorch загрузчики данных представляют объект типа torch.utils.data.DataLoader, который фактически является итерируемым объектом-оберткой вокруг Dataset. Пример подключения:

import torch
from torch.utils.data import DataLoader  # импортируем загрузчик данных

DataLoader представляет итерируемый объект, который абстрагирует загрузку данных с помощью простого API. Например, загрузим тестовый набор с помощью загрузчика данных:

import torch

from torchvision import datasets
from torchvision.transforms import ToTensor
from torch.utils.data import DataLoader

# набор для обучения
training_data = datasets.FashionMNIST(
    root="data",
    train=True,
    download=True,
    transform=ToTensor()
)

# набор для тестирования
test_data = datasets.FashionMNIST(
    root="data",
    train=False,
    download=True,
    transform=ToTensor()
)

train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)

Конструктор DataLoader принимает большое количество параметров. Рассмотрим наиболее базовые, которые были использованы в примере выше:

  • dataset: набор данных, из которого будут загружаться данные.

  • batch_size: количество выборок в пакете для загрузки (по умолчанию: 1).

  • shuffle: при значении True данные перемешиваются при обучении (по умолчанию: False).

Например, в примере выше инструкция

train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)

указывает, что будет загружаться набор training_data, количество выборок в пакете будет равно 64, и при обучении, когда с помощью загрузчика мы будем проходить по набору данных, данные будут перемешиваться при каждой итерации цикла обучения.

Проход по набору данных

После загрузки набора данных в DataLoader и можем проходить по нему по мере необходимости:

import torch

from torchvision import datasets
from torchvision.transforms import ToTensor
from torch.utils.data import DataLoader

import matplotlib.pyplot as plt

# набор для обучения
data = datasets.FashionMNIST(
    root="data",
    train=True,
    download=True,
    transform=ToTensor()
)

dataloader = DataLoader(data, batch_size=64, shuffle=True)

# отображаем картинку и метку
features, labels = next(iter(dataloader))
print(f"Feature batch shape: {features.size()}")
print(f"Labels batch shape: {labels.size()}")
img = features[0].squeeze()
label = labels[0]
plt.imshow(img, cmap="gray")
plt.show()
print(f"Label: {label}")

В примере выше с помощью выражения iter(dataloader) создается итератор из DataLoader, а next(...) извлекает первый батч данных. Напомню, что в данном случае размер батча - 64 изображения.

Каждый батч состоит из двух компонентов:

  • features: тензор изображений размером (64, 1, 28, 28) (64 изображения, 1 канал, 28×28 пикселей).

  • labels: тензор меток классов размером (64,) (числа от 0 до 9).

А дальше идет код визуализации одного изображения

  • img = features[0].squeeze(): удаление размерности канала (1, 28, 28 > 28, 28).

  • plt.imshow(img, cmap="gray"): отображение изображения в градациях серого.

  • plt.show(): вывод графика.

Загрузка данных из dataloader в PyTorch

При необходимости мы можем пройти по всем данным из загрузчика с помощью стандартного цикла:

dataloader = DataLoader(data, batch_size=64, shuffle=True)

for images, labels in dataloader:
    print("Тензор изображений:")
    print(images)
    print("\nТензор меток:")
    print(labels)
Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850