Мережа LSTM
Як ви вже знаєте, звичайні осередки RNN рідко використовують на практиці. Частіше застосовують Long Short-Term Memory, або LSTM, які набагато краще працюють із довгими послідовностями. У цій вправі ви самостійно збудуєте мережу LSTM!
Найважливіша відмінність у реалізації порівняно з RNN, яку ви створили раніше, полягає в тому, що LSTM має два, а не один прихований стани. Отже, вам потрібно ініціалізувати додатковий прихований стан і передати його до осередку LSTM.
torch і torch.nn уже імпортовано, тож почнімо кодувати!
Ця вправа є частиною курсу
Середній рівень Deep Learning з PyTorch
Інструкції до вправи
- У методі
.__init__()оголосіть шар LSTM і присвойте його доself.lstm. - У методі
forward()ініціалізуйте перший прихований стан довготривалої пам'ятіc0нулями. - У методі
forward()передайте до шаруLSTMусі три вхідні значення: вхід для поточного кроку часу та кортеж із двох прихованих станів.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
class Net(nn.Module):
def __init__(self, input_size):
super().__init__()
# Define lstm layer
____ = ____(
input_size=1,
hidden_size=32,
num_layers=2,
batch_first=True,
)
self.fc = nn.Linear(32, 1)
def forward(self, x):
h0 = torch.zeros(2, x.size(0), 32)
# Initialize long-term memory
c0 = ____
# Pass all inputs to lstm layer
out, _ = ____
out = self.fc(out[:, -1, :])
return out