Экосистема данных: torchvision и torchtext
Знакомимся с официальными библиотеками, которые избавляют от рутины с данными.
torchvision — официальная библиотека PyTorch для работы с изображениями: готовые датасеты, преобразования и предобученные модели.
Зачем эти библиотеки
Сам PyTorch — это тензоры, autograd и слои. Но в реальной задаче половина работы — загрузить данные и привести их в нужный вид. Чтобы не писать это каждый раз заново, команда PyTorch выпускает доменные библиотеки: torchvision для картинок, исторически torchtext для текста, torchaudio для звука. Они дают три вещи: готовые датасеты, трансформации и предобученные модели.
torchvision: готовые датасеты
Популярные наборы скачиваются одной строкой и сразу совместимы с DataLoader из пятого раздела:
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
train = datasets.MNIST(
root="./data", train=True, download=True,
transform=transforms.ToTensor(),
)
loader = DataLoader(train, batch_size=64, shuffle=True)
datasets.MNIST — это готовый Dataset: он реализует те же __len__ и __getitem__, что мы писали руками. Поэтому он сразу оборачивается в DataLoader без единой доработки.
Трансформации (transforms)
Сырые картинки нужно подготовить: превратить в тензор, нормализовать, иногда аугментировать. transforms описывают эту обработку как конвейер, который применяется к каждому примеру на лету:
transform = transforms.Compose([
transforms.Resize((224, 224)), # привести к нужному размеру
transforms.ToTensor(), # PIL-картинка -> тензор [0,1]
transforms.Normalize( # нормализация по каналам
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]),
])
Два важных пункта. ToTensor() не только превращает картинку в тензор, но и переставляет оси в формат (каналы, высота, ширина) и масштабирует пиксели в диапазон [0, 1]. Normalize вычитает среднее и делит на стандартное отклонение — сети учатся стабильнее на нормализованных данных. Числа в примере — это статистики ImageNet, их используют с предобученными моделями из прошлого урока.
Аугментация — трансформы для регуляризации
Случайные преобразования при обучении искусственно расширяют датасет и борются с переобучением (связь с пятым разделом):
train_transform = transforms.Compose([
transforms.RandomHorizontalFlip(), # случайное отражение
transforms.RandomRotation(10), # случайный поворот
transforms.ToTensor(),
])
Модель видит каждую картинку каждый раз чуть иначе и не может её зазубрить. Важно: аугментацию включают только на обучении, на валидации/тесте — нет.
Готовые модели
Мы уже пользовались torchvision.models в transfer learning. Там лежат ResNet, VGG, EfficientNet и другие — с предобученными весами. Это та самая основа для дообучения.
Текст: torchtext и современный путь
Для текста исторически был torchtext, но сегодня обработку текста в PyTorch чаще делают через экосистему Hugging Face (библиотеки transformers и datasets) — там готовые токенизаторы и предобученные языковые модели. Идея та же, что у torchvision: не писать загрузку и предобработку с нуля, а взять готовое.
| Домен | Библиотека | Что даёт |
| картинки | torchvision | датасеты, transforms, модели |
| звук | torchaudio | аудио-датасеты и преобразования |
| текст | Hugging Face | токенизаторы, языковые модели |
Итог
- Доменные библиотеки дают готовые датасеты, трансформации и предобученные модели.
torchvision.datasetsсовместимы с DataLoader без доработок.transformsготовят данные на лету;ToTensor+Normalize— базовый минимум, аугментация — против переобучения.- Для текста сегодня чаще берут экосистему Hugging Face.