Память на цепочке в PyTorch
Рекуррентный слой LSTM принимает
на вход последовательность векторов
и на каждом шаге обновляет внутреннюю
память. При создании задают размер
входного вектора и размер скрытого
слоя.
По умолчанию тензор входа имеет форму длина, затем пакет, затем размер вектора. Создадим короткую цепочку из пяти шагов с одним примером в пакете и выведем форму выходной последовательности:
import torch
import torch.nn as nn
layer = nn.LSTM(input_size=8, hidden_size=16)
sequence = torch.randn(5, 1, 8)
output, state = layer(sequence)
print(output.shape) # выведет torch.Size([5, 1, 16])
Длина цепочки на выходе совпадает с длиной на входе. В последней оси вместо исходного размера вектора стоит размер скрытого слоя.
Вызов возвращает пару: выход по шагам и второй элемент - состояние памяти. Разбор состояния вынесен в отдельный урок; здесь достаточно формы выходной последовательности.
import torch
import torch.nn as nn
layer = nn.LSTM(6, 10)
sequence = torch.randn(3, 2, 6)
output, _ = layer(sequence)
print(output.shape) # выведет torch.Size([3, 2, 10])
Соберите рекуррентный блок с
входом 4 и скрытым
размером 7.
Подайте цепочку 6 шагов
для одного примера и выведите
форму выхода по шагам.
Возьмите входной размер 9
и скрытый 5.
Пропустите через слой тензор
4 на 3 на 9
из случайных чисел и выведите
форму результата.
Опишите блок с вектором длиной
11 и внутренним размером
8.
Подайте две цепочки по 7
шагов и выведите форму
выходной последовательности.