Перейти к основному содержимому

PyTorch для разработчика

Разработчику

См. также: Классическое ML — scikit-learn · Анализ данных · раздел «ИИ»

PyTorch - глубокое обучение на Python

PyTorch — фреймворк глубокого обучения на Python: динамические вычислительные графы, GPU, автоматическое дифференцирование. Концепции нейросетей в энциклопедии ИИ описаны отдельно; здесь — практический вход разработчика: установка, тензор, модель, цикл fit, сохранение весов.

Перед PyTorch полезно пройти NumPy/pandas и по возможности scikit-learn — те же идеи train/test и метрик.

pip install torch torchvision

Для GPU нужны драйвер NVIDIA и сборка torch с поддержкой CUDA с официального индекса пакетов под вашу версию ОС.


Тензор

Тензор — многомерный массив с операциями на CPU или GPU.

import torch

x = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
y = torch.ones(2, 2)
z = x @ y # матричное умножение

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x_gpu = x.to(device)

Многие операции совместимы по духу с NumPy; отличие — тензор может участвовать в autograd и жить на GPU.


autograd — градиенты

PyTorch строит граф операций и считает производные для обучения.

x = torch.tensor([2.0, 3.0], requires_grad=True)
y = (x ** 2).sum()
y.backward()
print(x.grad) # tensor([4., 6.])

При обучении сети градиенты идут от функции потерь к весам слоёв; оптимизатор обновляет веса в противоположную сторону градиента.


Модель как nn.Module

import torch.nn as nn

class TinyNet(nn.Module):
def __init__(self, n_in: int, n_hidden: int, n_out: int):
super().__init__()
self.net = nn.Sequential(
nn.Linear(n_in, n_hidden),
nn.ReLU(),
nn.Linear(n_hidden, n_out),
)

def forward(self, x):
return self.net(x)

model = TinyNet(n_in=10, n_hidden=32, n_out=2).to(device)

forward вызывается при model(x). Параметры (weight, bias) регистрируются автоматически — их передают оптимизатору.


Цикл обучения

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=1e-3)

model.train()
for epoch in range(5):
for batch_x, batch_y in train_loader:
batch_x, batch_y = batch_x.to(device), batch_y.to(device)
optimizer.zero_grad()
logits = model(batch_x)
loss = criterion(logits, batch_y)
loss.backward()
optimizer.step()
ШагНазначение
zero_gradОбнулить градиенты с прошлого шага
forward + lossПредсказание и ошибка
backwardВычислить градиенты
stepОбновить веса

Для оценки на валидации: model.eval() и with torch.no_grad(): — градиенты не нужны.


Dataset и DataLoader

from torch.utils.data import Dataset, DataLoader

class TabularDataset(Dataset):
def __init__(self, features, labels):
self.x = torch.tensor(features, dtype=torch.float32)
self.y = torch.tensor(labels, dtype=torch.long)

def __len__(self):
return len(self.y)

def __getitem__(self, idx):
return self.x[idx], self.y[idx]

train_loader = DataLoader(dataset, batch_size=64, shuffle=True)

DataLoader батчирует данные и может подгружать их в фоне (num_workers). Для изображений часто используют готовые наборы из torchvision.datasets с трансформациями transforms.


Сохранение и загрузка

torch.save(model.state_dict(), "model_weights.pt")

model2 = TinyNet(10, 32, 2)
model2.load_state_dict(torch.load("model_weights.pt", map_location=device))
model2.eval()

Для полного checkpoint (веса + optimizer + epoch) сохраняют словарь. В продакшен иногда экспортируют в ONNX или TorchScript — отдельная тема развёртывания, см. применение ИИ.


Связь с экосистемой

КомпонентРоль
NumPy / pandasПодготовка таблиц до тензора
scikit-learnBaseline без нейросети
Hugging Face TransformersГотовые LLM поверх PyTorch
CUDAУскорение на GPU

Ограничения и этика

  • Обучение на личных данных без согласия и утечка модели — риски ИБ.
  • Большие модели требуют RAM/VRAM и энергии; для прототипа достаточно малой сети на CPU.
  • Метрики на тесте не гарантируют поведение в проде — нужен мониторинг.

Связанные материалы


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).