目录

前言

输出部分

学习目标

输出部分组成

线性层的作用

softmax层的作用

输出部分代码实现


前言

        前一节我们学习了解码器层的各个组成部分(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)

   

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐