시작하기무료로 시작하기

LSTM 네트워크

이미 아시듯, 기본 RNN 셀은 실무에서 자주 쓰이지 않아요. 긴 시퀀스를 훨씬 더 잘 처리하는 대안으로 Long Short-Term Memory 셀(LSTM)이 널리 사용됩니다. 이번 연습에서는 직접 LSTM 네트워크를 만들어 보겠습니다!

앞에서 만들었던 RNN 네트워크와 구현 면에서 가장 큰 차이는 LSTM은 은닉 상태가 하나가 아니라 두 개라는 점이에요. 따라서 추가적인 은닉 상태를 초기화한 뒤 LSTM 셀에 함께 전달해야 합니다.

torchtorch.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
코드 편집 및 실행