Статья Автор: Деникина Н.В., Деникин А.В.

PyTorch

PyTorch - это открытая библиотека машинного обучения на Python, разработанная командой Facebook AI Research (Meta AI). Используется для построения, обучения и развёртывания нейронных сетей.


Зачем библиотека, если всё уже работает

Библиотека не добавляет ни одной новой идеи - она делает то же самое, но быстрее и умеет считать на видеокарте.


Тензор PyTorch

Тот же массив с теми же осями, что и в numpy. Отличий два: указывается тип чисел (сеть считает дробными) и устройство — процессор или видеокарта.

 


Скопируй локально на свой компьютер и запусти. Запуск программы на сервере не всегда укладывается в разрешенное время


Вывод
torch.Size([2, 3])
torch.float32
2
tensor([4., 1.])

shape, ndim и срезы работают точно так же, как в numpy. Переучиваться не нужно.


Слой: nn.Linear

nn.Linear(входов, нейронов) — это ровно наш слой: умножение на матрицу весов плюс смещение. Ничего больше.

Одна ловушка: PyTorch хранит матрицу весов перевёрнутой, формой (нейронов, входов), а не (входов, нейронов). Поэтому при переносе своих весов матрицу надо транспонировать.



Вывод
torch.Size([2, 3])
[[20.   5.5]
 [22.  11.5]]
[[20.   5.5]
 [22.  11.5]]
True

Форма weight - (2, 3), наоборот к нашей (3, 2). Нужно транспонировать.

 


torch.no_grad() — это контекстный менеджер (блок кода), который отключает вычисление градиентов (производных).

Внутри этого блока PyTorch не запоминает, как были получены числа, и не строит граф вычислений для обратного распространения ошибки.
 



Сеть: nn.Sequential

nn.Sequential - стопка слоёв, применяются по очереди. 



Вывод
[[20.375  6.25 ]
 [21.875 10.   ]]
[[20.375  6.25 ]
 [21.875 10.   ]]
True

И ещё одно

Всё занятие мы считали по готовым весам, которые кто-то задал. Но библиотека умеет подбирать их сама - по примерам. Вот та самая программа.



Вывод
правило, по которому считали мы:
  веса [3.0, 1.5, -0.5]   смещение 8.0
что нашла модель, видя только заказы:
  веса [3.0, 1.48, -0.49]   смещение 7.97
прогноз для нового заказа, минут: 20.0

Программа увидела только заказы и время и восстановила правило почти точно. Прогноз для заказа 4 километра, 2 светофора, 6 курьеров — те же 20 минут, что мы считали вручную в паре 3.

Что здесь новое

Первые строки — знакомое умножение и сложение. Linear(3, 1) — слой из этой же пары, только с одним нейроном и обнулёнными весами: модель стартует, не зная ничего.

Новых строк ровно три. loss — насколько сильно модель промахивается. backward — в какую сторону двигать каждый вес. step — собственно двигает. Все три про обучение: loss и step разберём на занятии 2, backward на занятии 3.

Печать