[Python] PyTorch's seq2seq tutorial decoder

Discussão em 'Python' iniciado por Stack, Fevereiro 5, 2025.

  1. Stack

    Stack Membro Participativo

    I am learning through PyTorch's seq2seq tutorial: https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html

    I have a question about the decoder


    class DecoderRNN(nn.Module):
    def __init__(self, hidden_size, output_size):
    super(DecoderRNN, self).__init__()
    self.embedding = nn.Embedding(output_size, hidden_size)
    self.gru = nn.GRU(hidden_size, hidden_size, batch_first=True)
    self.out = nn.Linear(hidden_size, output_size)

    def forward(self, encoder_outputs, encoder_hidden, target_tensor=None):
    batch_size = encoder_outputs.size(0)
    decoder_input = torch.empty(batch_size, 1, dtype=torch.long, device=device).fill_(SOS_token)
    decoder_hidden = encoder_hidden
    decoder_outputs = []

    for i in range(MAX_LENGTH):
    decoder_output, decoder_hidden = self.forward_step(decoder_input, decoder_hidden)
    decoder_outputs.append(decoder_output)

    if target_tensor is not None:
    # Teacher forcing: Feed the target as the next input
    decoder_input = target_tensor[:, i].unsqueeze(1) # Teacher forcing
    else:
    # Without teacher forcing: use its own predictions as the next input
    _, topi = decoder_output.topk(1)
    decoder_input = topi.squeeze(-1).detach() # detach from history as input

    decoder_outputs = torch.cat(decoder_outputs, dim=1)
    decoder_outputs = F.log_softmax(decoder_outputs, dim=-1)
    return decoder_outputs, decoder_hidden, None # We return `None` for consistency in the training loop



    why is it that "if target_tensor is not None":

    decoder_input = target_tensor[:, i].unsqueeze(1)


    but if target_tensor is None:

    _, topi = decoder_output.topk(1)
    decoder_input = topi.squeeze(-1).detach()


    specifically, isn't the shape of decoder_input different in both cases?

    I feel like in the first case, the shape of decoder_input is a 2D tensor but 1D in the second case

    thank you for your help

    Continue reading...

Compartilhe esta Página