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

Нейросеть в PyTorch

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

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

Знакомимся с ней только сейчас: сначала стало понятно, что происходит внутри, и лишь потом появился инструмент, который это прячет.


Тензор PyTorch

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



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

Создан слой nn.Linear(64, 16). Сколько у него параметров вместе со смещениями?

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


Создан слой nn.Linear(5, 3). Какая форма будет у layer.weight?

Слой: nn.Linear

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

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



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

Форма weight — (2, 3), наоборот к нашей (3, 2). После транспонирования числа совпали.

Сверка с библиотекой — главный рабочий приём курса: если своя реализация расходится с библиотечной, ошибка почти всегда в своей.


Сеть: nn.Sequential

nn.Sequential — стопка слоёв, применяются по очереди. Ровно то, что мы делали руками в паре 5.



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

Своя реализация и библиотечная дали одинаковые числа. Значит, прямой проход мы понимаем правильно.


И ещё одно

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



Вывод
правило, по которому считали мы:
  веса [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.

Загрузка...
Чтобы оставить комментарий, необходимо авторизоваться
💬
Пока нет комментариев. Будьте первым!
Печать