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