- 🍨 本文为🔗365天深度学习训练营中的学习记录博客
- 🍖 原作者:K同学啊|接辅导、项目定制
一、课题背景和开发环境
📌第N6周:seq2seq翻译实战-Pytorch复现📌
- Python 3.8.12
- numpy==1.21.5 -> 1.24.3
- pytorch==1.8.1+cu111
📌本周任务:📌
- 结合训练中N5周的内容理解本文代码
二、代码
由于本人在第N5周已实现过基本代码,这次就只重写我自己代码和 @K同学啊|接辅导、项目定制 提供的代码中有差异的部分。
1. 解码器
class DecoderRNN(nn.Module):
# output_size为输出语言包含的所有单词数
def __init__(self, hidden_size, output_size):
super(DecoderRNN, self).__init__()
self.hidden_size = hidden_size
self.output_size = output_size
self.embedding = nn.Embedding(self.output_size, self.hidden_size)
self.gru = nn.GRU(self.hidden_size, self.hidden_size)
self.out = nn.Linear(self.hidden_size, self.output_size) # 把hidden_size个特征转换成输出语言的词汇个数
self.softmax = nn.LogSoftmax(dim=1)
# x为每步输入,hidden为上一步结果,encoder_outputs编码的状态矩阵计算的值是各词出现的概率
def forward(self, x, hidden):
output = self.embedding(x).view(1, 1, -1)
output = F.relu(output)
output, hidden = self.gru(output, hidden)
output = self.softmax(self.out(output[0]))
return output, hidden
def initHidden(self):
result = torch.zeros(1, 1, self.hidden_size, device=device)
return result