线性层的作⽤:
- 通过对上⼀步的线性变化得到指定维度的输出, 也就是转换维度的作⽤
softmax层的作⽤:
- 使最后⼀维的向量中的数字缩放到0-1的概率值域内, 并满⾜他们的和为1
代码实现:
import torch.nn.functional as F
class Generator(nn.Module):
def __init__(self, d_model, vocab_size):
#初始化函数的输⼊参数有两个, d_model代表词嵌⼊维度, vocab_size代表词表⼤⼩
super(Generator, self).__init__()
这个线性层的参数有两个, 就是初始化函数传进来的两个参数: d_model,vocab_size
self.project = nn.Linear(d_model, vocab_size)
def forward(self, x):
#前向逻辑函数中输⼊是上⼀层的输出张量x
# 在函数中, ⾸先使⽤上⼀步得到的self.project对x进⾏线性变化,
# 然后使⽤F中已经实现的log_softmax进⾏的softmax处理.
# 在这⾥之所以使⽤log_softmax是因为和我们这个pytorch版本的损失函数实现有关,在其他版本中将修复.
# log_softmax就是对softmax的结果⼜取了对数, 因为对数函数是单调递增函数,
# 因此对最终我们取最⼤的概率值没有影响. 最后返回结果即可.
return F.log_softmax(self.project(x), dim=-1)