当前位置: 首页 > news >正文

华夏名网vps免费网站管理助手网站推广优化排名教程

华夏名网vps免费网站管理助手,网站推广优化排名教程,四川网站建设益友,淄博市网站开发手撕Transformer – Day7 – Decoder Transformer 网络结构图 目录 手撕Transformer -- Day7 -- DecoderTransformer 网络结构图Decoder 代码Part1 库函数Part2 实现一个解码器Decoder,作为一个类Part3 测试 参考 Transformer 网络结构 Decoder 代码 Part1 库函数…

手撕Transformer – Day7 – Decoder

Transformer 网络结构图

目录

  • 手撕Transformer -- Day7 -- Decoder
    • Transformer 网络结构图
    • Decoder 代码
      • Part1 库函数
      • Part2 实现一个解码器Decoder,作为一个类
      • Part3 测试
    • 参考

在这里插入图片描述

Transformer 网络结构

Decoder 代码

Part1 库函数

# 该板块主要是对解码器进行串接,实现得到解码器部分
# 输入为x,还没嵌入的,但是PAD好的输入,输出需要对注意力值进行线性转化和softmax,最后得到一个单维向量,长度为词库大小。
'''
# Part1 导入库函数
'''
import torch
from torch import nn
from dataset import train_dataset, de_vocab, en_vocab, de_preprocess, en_preprocess,PAD_IDX
from encoder import Encoder
from decoder_block import DecoderBlock
from emb import EmbeddingWithPosition

Part2 实现一个解码器Decoder,作为一个类

'''
# Part2 设计解码器的类
'''class Decoder(nn.Module):def __init__(self, en_vocab_size, emd_size, nums_decoder_block, head, q_k_size, v_size, f_size):super().__init__()self.nums_decoder_block=nums_decoder_block# 首先对x进行编码self.emd = EmbeddingWithPosition(vocab_size=en_vocab_size, emd_size=emd_size)# 然后输入n个编码器self.decoder_list = nn.ModuleList()for _ in range(nums_decoder_block):self.decoder_list.append(DecoderBlock(head=head, emd_size=emd_size, q_k_size=q_k_size, v_size=v_size, f_size=f_size))# 然后需要线性化和softmax,目前是(batch_size,q_sqen_len,emd)# 得到(batch_size,vocab_size)self.linear1=nn.Linear(emd_size,en_vocab_size)self.softmax=nn.Softmax(-1)def forward(self, x, encoder_z,encoder_x): # encoder_x是编码器的输入(batch_size,q_seq_len)# x(batch_size,q_sqen_len)# 首先对解码器输入的padding位置进行掩码设置。mask1=(x==PAD_IDX).unsqueeze(1) # (batch_size,1,q_seq_len)mask1.expand(-1,x.size()[1],-1)  # (batch_size,q_seq_len,q_seq_len)# 然后要对解码器的输入的上半部分也取True然后和mask1或一下(也就是符号|),注意True表示需要隐藏的位置。# 注意:torch.tril 和 torch.triu 的区别就是决定矩阵的上半部分(不包含对角线)还是下半部分(不包含对角线)置为0,diagonal=1,表示置0的区域向上移动一行mask1=mask1 | torch.triu(torch.ones(mask1.size()[-1],mask1.size()[-1]),diagonal=1).bool().unsqueeze(0).expand(mask1.size()[0],-1,-1)# 然后对编码器的mask2进行掩码设置。在交叉注意力中,Padding 掩码的区域由K 和 V 的来源决定,# 而不是由Q 的来源决定。这确保了来自Q 的查询只关注K 中有效的信息位置。mask2 = (encoder_x == PAD_IDX).unsqueeze(1) # (batch_size,1,q_seq_len)mask2.expand(-1, encoder_x.size()[1], -1) # (batch_size,1,q_seq_len)x=self.emd(x)  # (batch_size,q_sqen_len,emd)# 进入解码器output=xfor i in range(self.nums_decoder_block):output = self.decoder_list[i](output,encoder_z,mask1,mask2)# 输出进行线性层和softmaxoutput=self.linear1(output)output=self.softmax(output)return output

Part3 测试

if __name__ == '__main__':# 取2个de句子转词ID序列,输入给encoderde_tokens1, de_ids1 = de_preprocess(train_dataset[0][0])de_tokens2, de_ids2 = de_preprocess(train_dataset[1][0])# 对应2个en句子转词ID序列,再做embedding,输入给decoderen_tokens1, en_ids1 = en_preprocess(train_dataset[0][1])en_tokens2, en_ids2 = en_preprocess(train_dataset[1][1])# de句子组成batch并padding对齐if len(de_ids1) < len(de_ids2):de_ids1.extend([PAD_IDX] * (len(de_ids2) - len(de_ids1)))elif len(de_ids1) > len(de_ids2):de_ids2.extend([PAD_IDX] * (len(de_ids1) - len(de_ids2)))enc_x_batch = torch.tensor([de_ids1, de_ids2], dtype=torch.long)print('enc_x_batch batch:', enc_x_batch.size())# en句子组成batch并padding对齐if len(en_ids1) < len(en_ids2):en_ids1.extend([PAD_IDX] * (len(en_ids2) - len(en_ids1)))elif len(en_ids1) > len(en_ids2):en_ids2.extend([PAD_IDX] * (len(en_ids1) - len(en_ids2)))dec_x_batch = torch.tensor([en_ids1, en_ids2], dtype=torch.long)print('dec_x_batch batch:', dec_x_batch.size())# Encoder编码,输出每个词的编码向量enc = Encoder(vocab_size=len(de_vocab), emd_size=128, q_k_size=256, v_size=512, f_size=512, head=8, nums_encoderblock=3)enc_outputs = enc(enc_x_batch)print('encoder outputs:', enc_outputs.size())# Decoder编码,输出每个词对应下一个词的概率dec = Decoder(en_vocab_size=len(en_vocab), emd_size=128, q_k_size=256, v_size=512, f_size=512, head=8, nums_decoder_block=3)enc_outputs = dec(dec_x_batch, enc_outputs, enc_x_batch)print(enc_outputs)print('decoder outputs:', enc_outputs.size())

参考

视频讲解:transformer-带位置信息的词嵌入向量_哔哩哔哩_bilibili

github代码库:github.com

http://www.tj-hxxt.cn/news/60757.html

相关文章:

  • 网站上的销售怎么做重庆电子商务网站seo
  • 手机网站建设的企业seo测试
  • 教育类手机网站模板下载有什么软件可以推广
  • 学做网站需要学那些程序行业数据统计网站
  • 专注高密做网站哪家强印度疫情为何突然消失
  • 海外主机做黄色网站推推蛙seo顾问
  • 什么网站可以做平面赚钱怎么去优化关键词
  • 网站做广告投放 要求做效果评估河北网站推广
  • 如何做网站上抓视频全网推广系统
  • 做淘宝必备的网站广东seo外包服务
  • 网站到期域名怎么解决办法app拉新推广接单平台
  • 贸易公司怎么做网站比较好客户管理软件crm排名
  • 好看的网站页面设计天津百度网站快速排名
  • wordpress如何关闭评论功能河北网站seo策划
  • 天心区网站建设公司企业网络推广计划书
  • 可以直接进入网站的正能量网站佛山网络营销推广
  • 哈尔滨网站开发渠道河南郑州网站推广优化外包
  • 牛网站建设微信营销的优势
  • 四川企业高端网站建设百度推广没有效果怎么办
  • 如何建设谷歌网站2345网址导航怎么彻底删掉
  • 网站后台更新怎么做优化大师下载安装免费
  • 西宁网站建设制作公司韩国vs加纳分析比分
  • 长沙网站排名优化武汉百度关键词推广
  • 网站建设建设关键词搜索技巧
  • 网站首页设计布局方式重庆关键词seo排名
  • 重庆梁平网站建设费用上海seo推广平台
  • 南宁网站制优秀的网页设计网站
  • 广州番禺哪里有学网站建设南宁优化网站收费
  • 怎样在商务部网站做备案百度app推广方法
  • 青岛做网站的有哪些深圳防疫措施优化