1.什么是子层连接结构:
如图所示,输入到每个子层以及规范化层的过程中,还使用了残差链接(跳跃连接),因此我们把这一部分结构整体叫做子层连接(代表子层及其链接结构),在每个编码器层中,都有两个子层,这两个子层加上周围的链接结构就形成了两个子层连接结构.

class SublayerConnection(nn.Module):def __init__(self,size,dropout=0.1):#size一般是都是词嵌入维度的大小,dropout本身是对模型结构中的节点数进行随机抑制的比率,super(SublayerConnection,self).__init__()#实例化规范化函数self.norm = LayerNorm(size)self.dropout = nn.Dropout(p=dropout)def forward(self, x, sublayer):#我们首先对输出进行规范化,然后将结果传给子层处理,之后再对子层进行dropout操作,#随机停止一些网络中神经元的作用,来防止过拟合.最后还有一个add操作,#因为存在跳跃连接,所以是将输入x与dropout后的子层输战结果相加作为最终的子层连接输出.return x + self.dropout(sublayer(self.norm(x)))
size=512
dropout=0.2
head=8
d_model=512
x=pe_result
mask = Variable(torch.zeros(2,4,4))
#假设子层中装的是多头注意力层,实例化这个类
self_attn=MultiHeadAttention(head,d_model)
#使用lambda获得一个函数类型的子层
sublayer = lambda x :self_attn(x,x,x,mask)
sc = SublayerConnection(size,dropout)
sc_result = sc(x,sublayer)
print(sc_result)
print(sc_result.shape)

2.编码器层的作用:
·作为编码器的组成单元,每个编码器层完成一次对输入的特征提取过程,即编码过程.

class Encoderlayer(nn.Module):def __init__(self, size, self_attn, feed_forward, dropout):super(Encoderlayer,self).__init__()self.self_attn = self_attnself.feed_forward = feed_forward#编码器层中有两个子层连接结构,所以使用clones函数进行克隆self.sublayer = clones(SublayerConnection(size, dropout),2)self.size=sizedef forward(self,x,mask):#里面就是按照结构图左侧的流程.首先通过第一个子层连接结构,其中包含多头自注意力子层,#然后通过第二个子层连接结构,其中包含前馈全连接子层.最后返回结果.x = self.sublayer[0](x,lambda x: self.self_attn(x,x,x,mask))return self.sublayer[1](x,self.feed_forward)
size = d_model = 512
head = 8
d_ff = 64
x=pe_result
dropout=0.2
self_attn=MultiHeadAttention(head, d_model)
ff = PositionwiseFeedForward(d_model, d_ff, dropout)
mask = Variable(torch.zeros(2,4,4))
el = Encoderlayer(size, self_attn, ff, dropout)
el_result = el(x,mask)
print(sc_result)
print(sc_result.shape)

3.编码器的实现

class Encoder(nn.Module):def __init__(self, layer, N):   #参数分别代表编码器层和编码器层的个数"super(Encoder,self).__init__()self.layers = clones(layer,N)      #首先使用clones函数克隆N个编码器层放在self.layers中#再初始化一个规范化层,它将用在编码器的最后面self.norm = LayerNorm(layer.size)def forward(self,x,mask):for layer in self.layers:x = layer(x,mask)return self.norm(x)
size = d_model = 512
head = 8
d_ff = 64
c=copy.deepcopy
attn = MultiHeadAttention(head, d_model)
ff = PositionwiseFeedForward(d_model, d_ff, dropout)
dropout=0.2
layer=Encoderlayer(size, c(attn), c(ff), dropout)
N=8
mask = Variable(torch.zeros(2,4,4))
x=pe_result
en = Encoder(layer, N)
en_result = en(x, mask)
print(en_result.shape)>>>torch.Size([2,4,512])

Transformer(4)相关推荐

  1. Vision Transformer(ViT)PyTorch代码全解析(附图解)

    Vision Transformer(ViT)PyTorch代码全解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单.本文将根 ...

  2. ICCV2021-PiT-池化操作不是CNN的专属,ViT说:“我也可以”;南大提出池化视觉Transformer(PiT)...

    关注公众号,发现CV技术之美 本文分享一篇 ICCV2021 论文:『Rethinking Spatial Dimensions of Vision Transformers』. 详细信息如下: 论文 ...

  3. Transformer(“变形金刚”)

    上一篇博客里面,我们讲解了self-attention机制.而self-attention机制最早是在"Attenion Is All Your Need"这篇论文中提出的.而se ...

  4. 13. Transformer(下)

    P33 Transformer(下) 视频链接 P33 Transformer(下) 1. Decoder: Autoregressive(AT) Decoder原理: Encoder vs Deco ...

  5. 一点就分享系列(理解篇3)—Cv任务“新世代”之Transformer(下篇)提前“cv领域展开”——快速学习“视觉transformer的理解”+“一些吐槽”

    一点就分享系列(理解篇3)Cv任务"新世代"之Transformer(下篇)--"cv领域展开" 提示:本篇内容为下篇,如感兴趣可翻阅上和中篇! 理解篇3 上 ...

  6. Efficient and Robust 2D-to-BEV Representation Learning via Geometry-guided Kernel Transformer(GKT)论文

    Efficient and Robust 2D-to-BEV Representation Learning via Geometry-guided Kernel Transformer 论文笔记 原 ...

  7. transformer(下)机器翻译+pytorch实现

    transformer(下)机器翻译+pytorch实现 说在前面 实验环境 注意点 1.加载数据 建立input pipeline 2.位置编码 positional encoding 3.掩码 m ...

  8. 神经网络学习小记录68——Tensorflow2版 Vision Transformer(VIT)模型的复现详解

    神经网络学习小记录68--Tensorflow2版 Vision Transformer(VIT)模型的复现详解 学习前言 什么是Vision Transformer(VIT) 代码下载 Vision ...

  9. Pyramid Vision Transformer(PVT): 纯Transformer设计,用于密集预测的通用backbone

    论文地址:https://arxiv.org/pdf/2102.12122.pdf 官方代码:https://github.com/whai362/PVT 目录 0.摘要 1.引言 2.相关工作 2. ...

  10. 【李宏毅机器学习】Transformer(p23) 学习笔记

    老二次元了... 文章目录 Transformer Sequence 用CNN取代RNN Self-Attention Self-attention is all you need. 流程 Self- ...

最新文章

  1. Double Free浅析(泄露堆地址的一种方法)
  2. 【Java面试题】正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
  3. Maven精选系列--继承与聚合
  4. 计算机科学导论第五版_五月份将开始提供438项免费在线编程和计算机科学课程
  5. linux的基础知识——shell语法
  6. 【算法】希尔排序 推导方法
  7. 解决 RaspberryPi 树莓派 NTP服务异常 无法自动同步时间
  8. 取消button的点击效果_(Vue动效)6.Vue中列表过渡效果
  9. TCP 协议(包含三次握手,四次挥手)
  10. 将json数据转换成实体对象 JSON格式转换 JSON实体
  11. thinkphp实现商城
  12. 孙玄吴守星:全方位剖析边缘计算架构设计以及应用实践
  13. rectangle函数与Rect函数的用法
  14. 计算机id换系统会变吗,小雷问答丨手机恢复出厂设置后会变成最原始的系统吗?...
  15. 微信小程序:南大小百合客户端
  16. nginx配置域名指向ip
  17. 【Captain America Sentinel of Liberty HD】美国队长:自由哨兵 v1.0.2
  18. Ms Sql Server 2000 个人绿色版 5.62
  19. 超文本传输协议版本 2 [http/2 spec]
  20. 差分GPS接收机定位原理

热门文章

  1. 微服务及分布式简单整理
  2. 洞悉数据分析之驾驶领导舱
  3. 微信小程序从注册appid到熟悉静态微信特有标签
  4. 智能座舱更看重「性能冗余」,4家中国供应商领跑高通两代平台
  5. 【nodejs实打造多人实时聊天室】
  6. bing必应壁纸下载器
  7. matlab复数的相位,复数的幅值和相位
  8. 超星项目最终答辩总结2023.5.18
  9. 企业应用别装逼:论互联网精神
  10. 设计模式的征途—16.访问者(Visitor)模式