| 816 | |
| 817 | class LuongAttnDecoderRNN(nn.Module): |
| 818 | def __init__(self, attn_model, embedding, hidden_size, output_size, n_layers=1, dropout=0.1): |
| 819 | super(LuongAttnDecoderRNN, self).__init__() |
| 820 | |
| 821 | # Keep for reference |
| 822 | self.attn_model = attn_model |
| 823 | self.hidden_size = hidden_size |
| 824 | self.output_size = output_size |
| 825 | self.n_layers = n_layers |
| 826 | self.dropout = dropout |
| 827 | |
| 828 | # Define layers |
| 829 | self.embedding = embedding |
| 830 | self.embedding_dropout = nn.Dropout(dropout) |
| 831 | self.gru = nn.GRU(hidden_size, hidden_size, n_layers, dropout=(0 if n_layers == 1 else dropout)) |
| 832 | self.concat = nn.Linear(hidden_size * 2, hidden_size) |
| 833 | self.out = nn.Linear(hidden_size, output_size) |
| 834 | |
| 835 | self.attn = Attn(attn_model, hidden_size) |
| 836 | |
| 837 | def forward(self, input_step, last_hidden, encoder_outputs): |
| 838 | # Note: we run this one step (word) at a time |