NumPy для начинающих в глубоком обучении: почему стоит изучить его до PyTorch
Почему новичкам в глубоком обучении стоит сначала изучить NumPy?
В большинстве книг и курсов по глубоком обучению сразу вводят PyTorch, TensorFlow и другие фреймворки. Но при работе с моделями часто возникает ощущение:
- "Что такое тензор?"
- "Почему возникает ошибка несовпадения shape?"
- "Как правильно сформировать батч?"
Большая часть путаницы появляется, когда вы переходите сразу к фреймворку, не осознав основы NumPy.
Tensorв PyTorch почти идентиченndarrayв NumPy- Предобработка данных, создание батчей, статистика – всё это всё ещё требует мышления в стиле NumPy
Если вы хотите действительно понять глубину глубинного обучения, NumPy – почти обязательный фундамент.
Что такое NumPy?
NumPy (Numerical Python) – библиотека, позволяющая быстро выполнять численные расчёты в Python.
Ключевые особенности:
- Многомерные массивы (
ndarray): вектор, матрица, тензор - Векторизованные операции: без
for‑циклов - Бродкастинг: умные операции между массивами разного shape
- Линейная алгебра: матричное умножение, транспонирование, обратная матрица
- Модуль случайных чисел: генерация, нормальное распределение, случайная инициализация
Поскольку почти все формулы в глубоком обучении сводятся к операциям над векторами и матрицами, NumPy можно назвать «языком» глубинного обучения.
Python‑список vs. массив NumPy
Сравним простые примеры.
# Python‑список
A = [1, 2, 3, 4]
B = [10, 20, 30, 40]
print(A + B) # [1, 2, 3, 4, 10, 20, 30, 40] – конкатенация
import numpy as np
A = np.array([1, 2, 3, 4])
B = np.array([10, 20, 30, 40])
print(A + B) # [11 22 33 44] – элементное сложение
Операция + в NumPy ведёт себя так, как ожидает математика, и тензоры в PyTorch следуют той же модели.
Векторизация: меньше циклов, код как формула
В глубоком обучении часто рекомендуют минимизировать for‑циклы и использовать векторизацию.
Python‑список + цикл
data = [1, 2, 3, 4, 5]
squared = []
for x in data:
squared.append(x ** 2)
print(squared) # [1, 4, 9, 16, 25]
NumPy‑векторизация
import numpy as np
data = np.array([1, 2, 3, 4, 5])
squared = data ** 2
print(squared) # [ 1 4 9 16 25]
- Код короче
- Читается как математическое выражение
- Выполняется на C‑уровне, быстрее
Тензоры PyTorch используют тот же подход.
Бродкастинг: работа с разными shape
Бродкастинг – правило, позволяющее автоматически подгонять массивы разного размера.
import numpy as np
x = np.array([[1, 2, 3],
[4, 5, 6]]) # shape: (2, 3)
b = np.array([10, 20, 30]) # shape: (3,)
y = x + b
print(y)
# [[11 22 33]
# [14 25 36]]
NumPy «разворачивает» b до (2, 3) и выполняет операцию. В PyTorch работает аналогично.
Вектор, матрица, тензор: как их представлять в NumPy
- Вектор – одномерный массив:
shape: (N,) - Матрица – двумерный массив:
shape: (M, N) - Тензор – массив 3‑х и более измерений
Пример: пакет изображений
batch_size = 32
# черно‑белые изображения 28x28
shape = (batch_size, 28, 28)
Простой матричный умножение
import numpy as np
x = np.array([1.0, 2.0, 3.0]) # shape: (3,)
W = np.array([[0.1, 0.2, 0.3],
[0.4, 0.5, 0.6]]) # shape: (2, 3)
y = W @ x
print(y) # [1.4 3.2]
Это эквивалент однопользовательного линейного слоя.
Как связаны NumPy и PyTorch?
1. Тензор и ndarray – «сестринские» объекты
- Оба – многомерные массивы с векторизованными операциями
- Функции:
shape,reshape,transpose,sum,mean– почти одинаковые
Многие используют NumPy как «практикум» для понимания PyTorch.
2. Предобработка данных обычно в стиле NumPy
Частые задачи:
- Чтение CSV, изображений, логов
- Преобразование в числовой формат
- Нормализация, стандартизация, разбиение на батчи
Обычно это делается с NumPy + pandas.
import numpy as np
import torch
np_data = np.random.randn(100, 3)
tensor_data = torch.from_numpy(np_data).float()
print(tensor_data.shape) # torch.Size([100, 3])
И наоборот, можно вернуть тензор в NumPy:
y = tensor_data.mean(dim=0)
y_np = y.detach().cpu().numpy()
3. GPU‑вычисления – PyTorch, концептуальная практика – NumPy
- PyTorch работает на GPU и поддерживает автодифференцирование
- NumPy – CPU‑ориентирован, но проще для отладки и экспериментов
Обычно сначала прототипируют в NumPy, потом переводят в PyTorch.
Часто используемые шаблоны NumPy в глубоком обучении
1. Случайная инициализация и шум
import numpy as np
W = np.random.randn(3, 3) * 0.01
x = np.array([1.0, 2.0, 3.0])
noise = np.random.normal(0, 0.1, size=x.shape)
x_noisy = x + noise
2. Нормализация данных
X = np.random.randn(100, 3) * 10 + 50
mean = X.mean(axis=0)
std = X.std(axis=0)
X_norm = (X - mean) / (std + 1e-8)
3. One‑hot кодирование
num_classes = 4
labels = np.array([0, 2, 1, 3])
one_hot = np.eye(num_classes)[labels]
print(one_hot)
# [[1. 0. 0. 0.]
# [0. 0. 1. 0.]
# [0. 1. 0. 0.]
# [0. 0. 0. 1.]]
4. Разбиение на батчи
X = np.random.randn(100, 3)
batch_size = 16
for i in range(0, len(X), batch_size):
batch = X[i:i+batch_size]
# batch можно подавать в модель
Что важно знать при изучении NumPy
Не нужно охватывать всё, достаточно фокусироваться на:
ndarray:np.array,dtype,shape,reshape,astype- Индексация & срезы:
x[0],x[1:3],x[:, 0],x[:, 1:3], логические индексы - Базовые операции:
+,-,*,/,**, сравнения,np.sum,np.mean,axis - Линейная алгебра:
@,np.dot,x.T - Бродкастинг: скаляры,
(N, D) + (D,),(N, 1) - Случайные функции:
np.random.randn,np.random.randint,np.random.permutation - Связь с PyTorch:
torch.from_numpy,tensor.numpy()
После освоения этих пунктов большинство операций в PyTorch станет понятнее.
Итог: NumPy – «язык» глубинного обучения
- NumPy – библиотека для численных расчётов
Tensorв PyTorch – это «глубинная» версияndarray- Освоив векторизацию, бродкастинг и линейную алгебру в NumPy, вы:
- Сократите ошибки shape
- Упростите перенос формул из статей в код
- Улучшите навыки предобработки и анализа данных
Если вы хотите понять глубинное обучение не только как набор команд, но и как математику, NumPy – лучший старт.

Комментариев нет.