이제 집중해서 살펴보아야 할 양방향 LSTM에 대한 네트워크 부분입니다. 양방향 LSTM과 LSTM이 다른 부분은 붉은색으로 구분해 두었습니다.

    코드 7-75 모델의 네트워크

    class biLSTM(nn.Module):
        def __init__(self, num_classes, input_size, hidden_size, num_layers, seq_length):
            super(biLSTM, self).__init__()
            self.num_classes = num_classes
            self.num_layers = num_layers
            self.input_size = input_size
            self.hidden_size = hidden_size
            self.seq_length = seq_length
    
            self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers, bidirectional=True, batch_first=True) ------ ① 
            self.fc = nn.Linear(hidden_size*2, num_classes) ------ ②
            self.relu = nn.ReLU()
    
        def forward(self,x):
            h_0 = Variable(torch.zeros(self.num_layers*2, x.size(0), self.hidden_size))
            c_0 = Variable(torch.zeros(self.num_layers*2, x.size(0), self.hidden_size))
            out, _ = self.lstm(x, (h_0, c_0))
            out = self.fc(out[:, -1, :]) ------ 마지막 시간(time step상 마지막 단계)의 은닉 상태
            out = self.relu(out)
            return out
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.