Тензоры PyTorch и Autograd
torch.Tensor, requires_grad, backward(), вычисление градиентов, операции над тензорами
«Тензоры PyTorch и Autograd» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Что такое PyTorch?
PyTorch — это фреймворк для глубокого обучения, построенный вокруг тензоров — многомерных массивов с ускорением на GPU и автоматическим дифференцированием. Два основополагающих понятия, которые Вам нужно освоить в первую очередь, — это тензоры и автоматическое дифференцирование.
pip install torch
import torchСоздание тензоров
Тензор похож на массив NumPy, но может находиться на GPU и отслеживать градиенты. Создайте его с помощью torch.tensor. У тензоров есть shape и dtype.
x = torch.tensor([1.0, 2.0, 3.0])
print(x.shape) # torch.Size([3])
print(x.dtype) # torch.float32Операции с тензорами
Тензоры поддерживают поэлементные математические операции, умножение матриц и изменение формы. Операции векторизованы и быстро выполняются на аппаратном обеспечении. Это вычислительная основа любой нейронной сети.
a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
b = torch.tensor([[5.0, 6.0], [7.0, 8.0]])
print(a + b)
print(a @ b) # matrix multiplyrequires_grad: отслеживание градиентов
Чтобы вычислять градиенты, создайте тензор с параметром requires_grad=True. PyTorch будет записывать каждую выполненную над ним операцию, формируя вычислительный граф, который можно дифференцировать позже.
x = torch.tensor([2.0, 3.0], requires_grad=True)
print(x.requires_grad) # TrueПостроение вычисления
Примените операции к тензору, отслеживающему градиенты, чтобы получить скалярный результат. Здесь мы возводим каждый элемент в квадрат и складываем их, получая одно число, которое можно дифференцировать по x.
x = torch.tensor([2.0, 3.0], requires_grad=True)
y = x.pow(2).sum() # y = x0^2 + x1^2
print(y) # tensor(13., grad_fn=...)Вызов backward()
Вызовите .backward() для скаляра, чтобы вычислить градиенты методом обратного распространения. PyTorch проходит по записанному графу в обратном направлении и автоматически вычисляет производные.
y.backward()Чтение .grad
После вызова backward() каждый входной тензор содержит свой градиент в .grad. Для y = sum(x^2) производная равна 2x, поэтому градиент равен [4, 6].
print(x.grad) # tensor([4., 6.])Накопление градиентов
Есть один неочевидный нюанс: градиенты складываются при нескольких вызовах backward(). В цикле обучения необходимо обнулять их на каждом шаге с помощью x.grad.zero_() или zero_grad() оптимизатора.
x.grad.zero_() # reset before the next backward()torch.no_grad() для вывода
Во время вывода градиенты не нужны, а их отслеживание напрасно расходует память. Оберните код предсказания в with torch.no_grad():, чтобы отключить построение графа и ускорить выполнение.
with torch.no_grad():
preds = x.pow(2).sum()
print(preds.requires_grad) # Falsedetach() для остановки распространения градиента
.detach() возвращает тензор, совместно использующий данные с исходным, но исключённый из вычислительного графа. Используйте его, когда нужно работать со значением, не позволяя градиентам распространяться через него обратно, например при ведении журнала или заморозке части сети.
z = x.detach()
print(z.requires_grad) # FalseПочему важно автоматическое дифференцирование
Автоматическое дифференцирование делает глубокое обучение практичным: Вы задаёте прямое вычисление, а PyTorch автоматически выводит градиенты для обратного распространения. В основе каждого написанного Вами цикла обучения лежат requires_grad, backward и .grad.
Быстрая проверка
Проверьте, насколько хорошо Вы понимаете автоматическое дифференцирование.
Повторение: тензоры и автоматическое дифференцирование
Вы создавали тензоры с помощью torch.tensor и включали отслеживание градиентов через requires_grad=True. Вы вычисляли результат, запускали .backward() и считывали производные из .grad. Вы узнали, что градиенты накапливаются, использовали torch.no_grad() для вывода и .detach() для остановки распространения градиента.
Часто задаваемые вопросы
Урок «Тензоры PyTorch и Autograd» бесплатный?
Да — полный текст урока «Тензоры PyTorch и Autograd» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Тензоры PyTorch и Autograd»?
torch.Tensor, requires_grad, backward(), вычисление градиентов, операции над тензорами Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Тензоры PyTorch и Autograd»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Тензоры PyTorch и Autograd
- Пользовательские наборы данных и DataLoaders
- Создание и обучение CNN в PyTorch
- Обнаружение объектов с YOLOv8