Seq2Seq 模型是循环神经网络(RNN)的一种,常用于序列到序列的任务,例如机器翻译、语音识别等。以下是一个使用 PyTorch 实现的 Seq2Seq 模型的代码示例。

1. 简介

Seq2Seq 模型主要由两个 RNN 构成:一个编码器(Encoder)和一个解码器(Decoder)。编码器用于将输入序列转换为固定长度的上下文表示,解码器则根据这个上下文表示生成输出序列。

2. 编码器

编码器通常使用 LSTM 或 GRU 单元。以下是一个简单的编码器实现:

class Encoder(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(Encoder, self).__init__()
        self.hidden_size = hidden_size
        self.lstm = nn.LSTM(input_size, hidden_size)

    def forward(self, input_seq):
        _, hidden = self.lstm(input_seq)
        return hidden

3. 解码器

解码器同样使用 LSTM 或 GRU 单元。以下是一个简单的解码器实现:

class Decoder(nn.Module):
    def __init__(self, hidden_size, output_size):
        super(Decoder, self).__init__()
        self.hidden_size = hidden_size
        self.lstm = nn.LSTM(hidden_size, hidden_size)
        self.linear = nn.Linear(hidden_size, output_size)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, input_seq, hidden):
        output, hidden = self.lstm(input_seq, hidden)
        output = self.linear(output)
        output = self.softmax(output)
        return output, hidden

4. 完整模型

以下是一个完整的 Seq2Seq 模型实现:

class Seq2Seq(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(Seq2Seq, self).__init__()
        self.encoder = Encoder(input_size, hidden_size)
        self.decoder = Decoder(hidden_size, output_size)

    def forward(self, input_seq, target_seq):
        encoder_output, hidden = self.encoder(input_seq)
        output, hidden = self.decoder(target_seq, hidden)
        return output, hidden

5. 扩展阅读

更多关于 PyTorch 和 Seq2Seq 模型的内容,请参考我们的 PyTorch 教程