【Transformer从零开始代码实现 pytoch版】(四)输出部件:Linear+softmax

news/2024/7/19 10:43:09 标签: transformer, 深度学习, 人工智能

输出部分

在这里插入图片描述

线性层+softmax层

作用:
通过对上一步经解码器输出的值进行线性变化得到指定维度的输出,也就是转换维度的作用。其中,softmax层的作用是使最后一维的向量中的数字缩放到0-1的概率值域内,并满足他们的和为1。

代码部分

class Generator(nn.Module):
    def __init__(self, d_model, vocab_size):
        """ 对解码器的输出进行一个线性变换后,

        :param d_model: 词嵌入的维度
        :param vocab_size: 词表的大小
        """
        super(Generator, self).__init__()
        self.project = nn.Linear(d_model, vocab_size)

    def forward(self, x):
        return F.log_softmax(self.project(x), dim=-1)

示例

d_model = 512
vocab_size = 1000
x = de_res

gen = Generator(d_model, vocab_size)
gen_res = gen(x)
print(f"gen_res: {gen_res}\n shape:{gen_res.shape}")


gen_res: tensor([[[-6.4770, -6.4462, -6.7124,  ..., -6.2073, -6.9740, -7.7259],
         [-6.8274, -7.6112, -6.7717,  ..., -6.8232, -6.4413, -6.1669],
         [-6.6380, -6.8908, -7.6641,  ..., -5.8640, -7.6810, -6.2209],
         [-5.7474, -7.2175, -7.1327,  ..., -6.5134, -6.8174, -6.8797]],
        [[-6.8838, -7.2975, -6.8391,  ..., -6.6967, -8.0755, -8.4198],
         [-6.9594, -7.3281, -7.3746,  ..., -6.5104, -6.5213, -7.0527],
         [-6.7861, -6.5134, -6.9520,  ..., -6.4404, -7.1817, -7.1947],
         [-6.3320, -7.0271, -7.1489,  ..., -7.7585, -6.6570, -6.9551]]],
       grad_fn=<LogSoftmaxBackward0>)
 shape:torch.Size([2, 4, 1000])

下面和经过解码器进行对比

de_res: tensor([[[-0.7714,  0.1066,  1.8197,  ..., -0.1137,  0.2005,  0.5856],
         [-0.9215, -0.9844, -0.4962,  ..., -0.1074,  0.4848,  0.3493],
         [-2.2495,  0.0859, -0.7644,  ..., -0.0679, -0.7270, -1.3438],
         [-0.4822,  0.2821,  1.0786,  ..., -1.9442,  0.8834, -1.1757]],
        [[-0.2491, -0.6117,  0.7908,  ..., -2.1624,  0.6212,  0.6190],
         [-0.3938, -0.5203,  0.6412,  ..., -0.8679,  0.8462,  0.3037],
         [-1.0217, -1.0685, -0.5138,  ...,  1.2010,  2.0795, -0.0143],
         [-0.2919, -0.5916,  1.5231,  ..., -0.1215,  0.7127, -0.0586]]],
       grad_fn=<AddBackward0>)

http://www.niftyadmin.cn/n/5175873.html

相关文章

图论14-最短路径-Dijkstra算法+Bellman-Ford算法+Floyed算法

文章目录 0 代码仓库1 Dijkstra算法2 Dijkstra算法的实现2.1 设置距离数组2.2 找到当前路径的最小值 curdis&#xff0c;及对应的该顶点cur2.3 更新权重2.4 其他接口2.4.1 判断某个顶点的连通性2.4.2 求源点s到某个顶点的最短路径 3使用优先队列优化-Dijkstra算法3.1 设计内部类…

Leetcode—765.情侣牵手【困难】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—765.情侣牵手 并查集置换环思路 参考自ylb 实现代码 class Solution { public:int minSwapsCouples(vector<int>& row) {int n row.size();int len n / 2;vector<int> p(len);iota(p.begin(), p.…

火山引擎 DataLeap 计算治理自动化解决方案实践和思考

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 【导读】本文旨在探讨火山引擎 DataLeap 在处理计算治理过程中所面临的问题及其解决方案&#xff0c;并展示这些解决方案带来的实际收益。主要内容包括&#xff1a;…

通讯协议学习之路(实践部分):UART开发实践

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 本文…

屏幕截图软件 Snagit mac中文版软件特点

Snagit mac是一款屏幕截图和视频录制软件&#xff0c;它可以帮助用户快速捕捉屏幕上的任何内容&#xff0c;并将其编辑、标注和共享。 Snagit mac软件特点 多种截图模式&#xff1a;支持全屏截图、窗口截图、区域截图、延时截图等多种截图模式&#xff0c;满足不同用户的需求。…

java--String使用时的注意事项

1.String使用时的注意事项 第一点&#xff1a; ①String对象的内容不可改变&#xff0c;被称为不可变字符串对象。(因为字符串是引用类型&#xff0c;每次都是引用一个地址&#xff0c;就相当于你有车&#xff0c;但是你不可能天天把车踹兜里&#xff0c;只能把钥匙踹兜里&am…

总结MYSQL中VHARCHAR和TEXT

前几天在设计表结构时&#xff0c;针对表中的一个字段使用text还是使用varchar是受到了开发同学的挑战。本篇文章对text和varchar的区别做个总结。 VHARCHAR和TEXT对比 char(n)varchar(n)中括号中n代表字符的个数&#xff0c;并不代表字节个数&#xff0c;所以当使用了中文的…

英国作为留学目的地的传统

引言&#xff1a; 英国作为世界上最受欢迎的留学目的地之一&#xff0c;拥有悠久的历史和丰富的文化传统。本文将探讨英国作为留学目的地的传统&#xff0c;从中我们可以看到英国作为教育中心和学术研究的殿堂的传统&#xff0c;以及其对全球学生的吸引力。 卓越的教育传统&a…