Тензоры
PyTorch — самая популярная библиотека для нейросетей: на ней сделаны ChatGPT-подобные модели, Stable Diffusion, автопилоты. Её любят за то, что код на ней — обычный Python.
В курсе вы соберёте сеть, распознающую рукописные цифры: тензоры, производные, слои, обучение и данные. Видеокарта не нужна — всё работает на процессоре.
Тензор
Тензор — многомерный массив чисел, как массив NumPy, но умеющий считать производные и работать на видеокарте.
import torch
a = torch.tensor([[1, 2, 3], [4, 5, 6]]) # из списка
z = torch.zeros(32, 28, 28) # нули
r = torch.rand(3, 4) # случайные из [0, 1)
n = torch.arange(10) # 0, 1, …, 9
a.shape # torch.Size([2, 3])
a.dtype # torch.int64
a.float() # тот же тензор с float32
Картинка 28×28 — тензор формы (28, 28), пакет из 32 картинок — (32, 28, 28). Первое измерение пакета — номер примера.
Типы
Сети работают с float32. Картинки обычно хранятся байтами uint8 (0…255), поэтому их превращают в дробные:
x = pixels.float() / 255 # 0…1
В PyTorch / всегда даёт дробный результат, а // — целочисленный.
Операции
a + b, a * b, a ** 2 # поэлементно
a @ b # матричное умножение
a.sum(), a.mean(), a.max() # по всему тензору
a.sum(dim=1) # по строкам: результат — по числу на строку
x * 2 + 1 # число «растягивается» на весь тензор (broadcasting)
dim — измерение, вдоль которого идёт операция: для матрицы dim=0 — вдоль столбцов, dim=1 — вдоль строк.
Форма
t = torch.arange(12)
t.reshape(3, 4) # 3 строки по 4
t.reshape(3, -1) # -1 — «посчитай сам»
batch.reshape(batch.shape[0], -1) # (N, 28, 28) → (N, 784)
reshape (и похожий view) не меняет числа, только то, как они разложены. Число элементов должно совпасть.
Индексы и выбор
x[0] # первая строка
x[:, 2] # третий столбец
x[x > 0.5] # элементы больше 0.5
logits.argmax(dim=1) # номер наибольшего в каждой строке
(pred == labels).float().mean() # доля совпадений
t.item() # тензор из одного числа → число Python
t.tolist() # тензор → списки Python
Как проверяются задачи
Как и в других курсах на компьютере, задача — готовая программа с исправляемым участком. Проверка вызывает ваши функции на своих данных, а «Запустить у себя» показывает небольшую демонстрацию. Первый запуск PyTorch может занять несколько секунд — библиотека большая.
Итог
torch.tensor,zeros,rand,arange;shape,dtype,float();- поэлементные операции,
sum(dim=…),@; reshape(N, -1);argmax(dim=1), сравнение и.float().mean(),.item(),.tolist().