transformer架构解析{输出部分}(含代码)-7
·
目录
前言
前一节我们学习了解码器层的各个组成部分(3个子层结构:多头自注意力机制+规范化层+残差连接;多头注意力机制+规范化层+残差连接;前馈神经网络+规范化层+残差连接),解码器以及它们的实现代码。
输出部分
学习目标
了解线性层和softmax的作用
掌握线性层和softmax的实现过程
输出部分组成
线性层,softmax

线性层的作用
通过对上一层(解码器)的线性变化得到指定维度的输出,也就是维度转换的作用
softmax层的作用
使最后一维的向量中的数字缩放到0-1的概率值域内,并满足它们和为1
输出部分代码实现
#输出层的代码分析
#线性层和sotfmax层的代码分析
#nn.founctional工具包装载了网络层中那些只进行计算,而没有参数的层
#将线性层和sotfmax层一起实现,因为二者的共同目标是生成最后的结构
#因此把类的名字叫做Genertor,生成器类
class Generator(nn.Module):
def __init__(self, d_model,vocab_size):
#d_model代表词嵌入的维度,vocab_size代表词表大小
super(Generator,self).__init__()
#首先使用nn中定义的线性层进行实例化,得到一个对象self.project等待使用
#这个线性层的参数有两个,就是初始化函数传进来两个参数:d_model,vocab_size
self.project = nn.Linear(d_model,vocab_size)
def forward(self,x):
#前向逻辑函数的输入是上一层的输出张量x
#在函数中,首先使用上一层得到的self.project对x进行线性处理
#然后再F中使用实现的log_softmax进行处理
#在这里之所以使用log_softmax是因为我们使用的pytorch版本的损失函数有关,在其他
#版本中log_softmax就是对softmax的结果又取了对数,因为对数函数是单调递增的
#因此对我们最终的取最大的概率没有影响。最后返回结果即可
return F.log_softmax(self.project(x),dim=-1)
#实例化参数
#词嵌入的维度
d_model = 512
#词表的大小是1000
vocab_size = 1000
#输入参数
x = de_result
#调用
gen = Generator(d_model,vocab_size)
gen_result = gen(x)
print(gen_result)
print(gen_result.shape)

更多推荐
所有评论(0)