LSTM 네트워크
이미 아시듯, 기본 RNN 셀은 실무에서 자주 쓰이지 않아요. 긴 시퀀스를 훨씬 더 잘 처리하는 대안으로 Long Short-Term Memory 셀(LSTM)이 널리 사용됩니다. 이번 연습에서는 직접 LSTM 네트워크를 만들어 보겠습니다!
앞에서 만들었던 RNN 네트워크와 구현 면에서 가장 큰 차이는 LSTM은 은닉 상태가 하나가 아니라 두 개라는 점이에요. 따라서 추가적인 은닉 상태를 초기화한 뒤 LSTM 셀에 함께 전달해야 합니다.
torch와 torch.nn은 이미 임포트되어 있으니, 바로 코딩을 시작해 보세요!
이 연습은 강의의 일부입니다
PyTorch로 배우는 Intermediate Deep Learning
연습 안내
.__init__()메서드에서 LSTM 레이어를 정의하고self.lstm에 할당하세요.forward()메서드에서 첫 번째 장기 메모리 은닉 상태c0를 영(0)으로 초기화하세요.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