1 输出部分介绍
2 线性层的作用
- 通过对上一步的线性变化得到指定维度的输出, 也就是转换维度的作用.
3 softmax层的作用
- 使最后一维的向量中的数字缩放到0-1的概率值域内, 并满足他们的和为1.
3.1 线性层和softmax层的代码分析
# 解码器类 Generator 实现思路分析
# init函数 (self, d_model, vocab_size)
# 定义线性层self.project
# forward函数 (self, x)
# 数据 F.log_softmax(self.project(x), dim=-1)
class Generator(nn.Module):
def __init__(self, d_model, vocab_size):
# 参数d_model 线性层输入特征尺寸大小
# 参数vocab_size 线层输出尺寸大小
super(Generator, self).__init__()
# 定义线性层
self.project = nn.Linear(d_model, vocab_size)
def forward(self, x):
# 数据经过线性层 最后一个维度归一化 log方式
x = F.log_softmax(self.project(x), dim=-1)
return x
>>> m = nn.Linear(20, 30)
>>> input = torch.randn(128, 20)
>>> output = m(input)
>>> print(output.size())
torch.Size([128, 30])
if __name__ == '__main__':
# 实例化output层对象
d_model = 512
vocab_size = 1000
my_generator = Generator(d_model, vocab_size )
# 准备模型数据
x = torch.randn(2, 4, 512)
# 数据经过out层
gen_result = my_generator(x)
print('gen_result--->', gen_result.shape, '\n', gen_result)
gen_result---> torch.Size([2, 4, 1000])
tensor([[[-6.5949, -7.0295, -6.5928, ..., -7.4317, -7.5488, -6.4871],
[-7.0481, -6.2352, -7.2797, ..., -6.1491, -6.1621, -7.1798],
[-8.1724, -7.0675, -8.2814, ..., -6.0033, -7.1100, -7.6844],
[-6.2466, -6.6074, -6.1852, ..., -6.8373, -7.6600, -6.8578]],
[[-7.7598, -7.4174, -6.2134, ..., -7.8000, -6.9862, -6.9261],
[-6.4790, -7.5458, -6.2342, ..., -6.8340, -6.6827, -7.0287],
[-7.2524, -7.2598, -7.0600, ..., -7.5680, -6.9492, -6.7689],
[-6.6260, -6.1928, -6.7045, ..., -6.6323, -7.9005, -7.5397]]],
grad_fn=<LogSoftmaxBackward0>)