임베딩 계층에서는 출력을 위해 딕셔너리를 조회할 테이블을 만들며, GRU 계층에서는 다음 단어를 예측하기 위한 확률을 계산합니다. 그 후 선형 계층에서는 계산된 확률 값 중 최적의 값(최종 출력 단어)을 선택하기 위해 소프트맥스 활성화 함수를 사용합니다.
코드 10-30 디코더 네트워크
class Decoder(nn.Module):
def __init__(self, output_dim, hidden_dim, embbed_dim, num_layers):
super(Decoder, self).__init__()
self.embbed_dim = embbed_dim
self.hidden_dim = hidden_dim
self.output_dim = output_dim
self.num_layers = num_layers
self.embedding = nn.Embedding(output_dim, self.embbed_dim) ------ 임베딩 계층 초기화
self.gru = nn.GRU(self.embbed_dim, self.hidden_dim, num_layers=self.num_layers) ------ GRU 계층 초기화
self.out = nn.Linear(self.hidden_dim, output_dim) ------ 선형 계층 초기화
self.softmax = nn.LogSoftmax(dim=1) ------ ①
def forward(self, input, hidden):
input = input.view(1, -1) ------ 입력을 (1, 배치 크기)로 변경
embedded = F.relu(self.embedding(input))
output, hidden = self.gru(embedded, hidden)
prediction = self.softmax(self.out(output[0]))
return prediction, hidden