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

泸州建设工程质量监督网站企业文化vi设计

泸州建设工程质量监督网站,企业文化vi设计,wordpress教育网站,seo文章目录 1、位置编码器的作用 2、代码演示 (1)、使用unsqueeze扩展维度 (2)、使用squeeze降维 (3)、显示张量维度 (4)、随机失活张量中的数值 3、定义位置编码器类,我…

目录

1、位置编码器的作用

2、代码演示

(1)、使用unsqueeze扩展维度

(2)、使用squeeze降维

(3)、显示张量维度

(4)、随机失活张量中的数值

3、定义位置编码器类,我们同样把它看作是一个层,因此会继承nn.Module


1、位置编码器的作用

  • 因为在Transformers的编码器结构中,并没有针对词汇位置信息的处理,因此需要在Embedding层后加入位置编码器,将词汇位置不同可能会产生不同语义的信息加入到词嵌入张量中,以弥补位置信息的缺失

2、代码演示

(1)、使用unsqueeze扩展维度

position = torch.arange(0,10)
print(position.shape)
position = torch.arange(0,10).unsqueeze(1)   #unsqueeze(0) 扩展第一个维度torch.Size([1, 10]),#unsqueeze(1) 扩展第二个维度torch.Size([10, 1])#unsqueeze(2) 是错误的写法
print(position)
print(position.shape)

(2)、使用squeeze降维

x = torch.LongTensor([[[1],[4]],[[7],[10]]])
print(x)
print(x.shape)
y = torch.squeeze(x)
print(y.shape)
print(y)

tensor([[[ 1],
         [ 4]],

        [[ 7],
         [10]]])
torch.Size([2, 2, 1])
torch.Size([2, 2])
tensor([[ 1,  4],
        [ 7, 10]])

在使用squeeze函数进行降维时,只有当被降维的维度的大小为1时才会将其降维。如果被降维的维度大小不为1,则不会对张量的值产生影响。因为上面的数据中第三个维度为1,所以将第三维进行降维,得到一个二维张量

(3)、显示张量维度

x = torch.LongTensor([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(x.size(0))
print(x.size(1))
print(x.size(2))

(4)、随机失活张量中的数值

m = nn.Dropout(p=0.2)
input = torch.rand(4,5)
output = m(input)
print(output)

在张量中的 20 个数据中有 20% 的随机失活为0,也即有 4 个

3、定义位置编码器类,我们同样把它看作是一个层,因此会继承nn.Module

import torch
from torch.autograd import Variable
import math
import torch.nn as nn
class PositionalEncoding(nn.Module):def __init__(self,d_model,dropout,max_len=5000):""":param d_model: 词嵌入的维度:param dropout: 随机失活,置0比率:param max_len: 每个句子的最大长度,也就是每个句子中单词的最大个数"""super(PositionalEncoding,self).__init__()self.dropout = nn.Dropout(p=dropout)pe = torch.zeros(max_len,d_model) # 初始化一个位置编码器矩阵,它是一个0矩阵,矩阵的大小是max_len * d_modelposition = torch.arange(0,max_len).unsqueeze(1) # 初始一个绝对位置矩阵div_term = torch.exp(torch.arange(0,d_model,2)*-(math.log(1000.0)/d_model))pe[:,0::2] = torch.sin(position*div_term)pe[:,1::2] = torch.cos(position*div_term)pe = pe.unsqueeze(0)  # 将二维矩阵扩展为三维和embedding的输出(一个三维向量)相加self.register_buffer('pe',pe) # 把pe位置编码矩阵注册成模型的buffer,对模型是有帮助的,但是却不是模型结构中的超参数或者参数,不需要随着优化步骤进行更新的增益对象。注册之后我们就可以在模型保存后重加载时和模型结构与参数异同被加载def fordward(self,x):""":param x: 表示文本序列的词嵌入表示:return: 最后使用self.dropout(x)对对象进行“丢弃”操作,并返回结果"""x = x + Variable(self.pe[:, :x.size(1)],requires_grad = False)   # 不需要梯度求导,而且使用切片操作,因为我们默认的max_len为5000,但是很难一个句子有5000个词汇,所以要根据传递过来的实际单词的个数对创建的位置编码矩阵进行切片操作return self.dropout(x)
# 构建Embedding类来实现文本嵌入层
class Embeddings(nn.Module):def __init__(self,vocab,d_model):""":param vocab: 词表的大小:param d_model: 词嵌入的维度"""super(Embeddings,self).__init__()self.lut = nn.Embedding(vocab,d_model)self.d_model = d_modeldef forward(self,x):""":param x: 因为Embedding层是首层,所以代表输入给模型的文本通过词汇映射后的张量:return:"""return self.lut(x) * math.sqrt(self.d_model)
# 实例化参数
d_model = 512
dropout = 0.1
max_len = 60  # 句子最大长度
# 输入 x 是 Embedding层输出的张量,形状为 2 * 4 * 512
x = Variable(torch.LongTensor([[100,2,42,508],[491,998,1,221]]))
emb = Embeddings(1000,512)
embr = emb(x)
print('embr.shape:',embr.shape)  # 2 * 4 * 512
pe = PositionalEncoding(d_model, dropout,max_len)
pe_result = pe(embr)
print(pe_result)
print(pe_result.shape)
http://www.yayakq.cn/news/787565/

相关文章:

  • 宠物医院网站开发背景方太产品站网站建设
  • 六安做网站seo网站名称 如何注册
  • 西安网站制作培训wordpress文件权限设置
  • 广东省建设厅网站深圳创业补贴
  • 手机商城网站模板承德名城建设集团网站
  • 高校网站建设近期情况说明河南省建设厅建筑业信息网
  • 站长工具精品各大网站网址目录
  • 网站排名诊断购物网站开发的目的意义
  • 淘宝接网站开发的活怎么做一淘宝客网站吗
  • 深圳网站设计开发平台宣传推广策略有哪些
  • 南昌高端网站开发费用表获取网页 代码 做网站
  • 房地产手机端网站建设wordpress主题tint
  • 网站改版 被百度k中国纪检监察报电子版官网
  • 建设网站需要多少时间网业分离是什么
  • 轻应用网站模板郑州网站建设饣汉狮网络
  • 赣州网站建设hyxxjs皮肤自做头像的网站
  • gta5手机网站大全国内外创意网站欣赏
  • 编写网站代码固始网站制作
  • 网站备案幕布照如何做凡科做网站在百度能看见吗
  • 免费传奇网站模板秦皇岛市建设局
  • 国外男女直接做的视频网站如何进行网络推广营销
  • 织梦后台做的网站怎么绑定域名企业oa管理系统
  • vps搭建网站教程宁波建设网表格
  • 网站备案审批号爱山东app下载注册流程
  • 做外贸怎样免费登录外国网站住房建设部网站 保定
  • 网站首页缩略图 seo做网站记者好吗
  • 企业外部网站建设如何制作网页表格
  • 自己怎么注册网站模板南宁培训网站建设
  • 搭建网站需要什么新奇网站建设
  • 福建就福建省住房与城乡建设厅网站做网站需要公司