코드 10-29 인코더 네트워크
class Encoder(nn.Module):
def __init__(self, input_dim, hidden_dim, embbed_dim, num_layers):
super(Encoder, self).__init__()
self.input_dim = input_dim ------ 인코더에서 사용할 입력층
self.embbed_dim = embbed_dim ------ 인코더에서 사용할 임베딩 계층
self.hidden_dim = hidden_dim ------ 인코더에서 사용할 은닉층(이전 은닉층)
self.num_layers = num_layers ------ 인코더에서 사용할 GRU의 계층 개수
self.embedding = nn.Embedding(input_dim, self.embbed_dim) ------ 임베딩 계층 초기화
self.gru = nn.GRU(self.embbed_dim, self.hidden_dim, num_layers=self.num_layers) ------ 임베딩 차원, 은닉층 차원, GRU의 계층 개수를 이용하여 GRU 계층을 초기화
def forward(self, src):
embedded = self.embedding(src).view(1, 1, -1) ------ 임베딩 처리
outputs, hidden = self.gru(embedded) ------ 임베딩 결과를 GRU 모델에 적용
return outputs, hidden
디코더는 인코더 출력을 디코딩하여 다음 출력을 예측합니다. 디코더는 임베딩 계층, GRU 계층, 선형(linear) 계층으로 구성됩니다. 코드 10-30과 비교하기 위해 디코더 네트워크를 영문으로 작성했습니다.
▲ 그림 10-17 디코더 네트워크