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