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

地区网站建设如何做外贸网店

地区网站建设,如何做外贸网店,织梦下载源码下载,网站建设的售后服务怎么写目录 1、子层连接结构介绍 2、子层连接结构 3、代码实现 1、子层连接结构介绍 输入到每个子层以及规范化层的过程中#xff0c;还使用了残差连接#xff08;跳跃连接#xff09;#xff0c;因此我们把这一部分整体结构叫子层连接#xff08;代表子层及其连接结构#xf… 目录 1、子层连接结构介绍 2、子层连接结构 3、代码实现 1、子层连接结构介绍 输入到每个子层以及规范化层的过程中还使用了残差连接跳跃连接因此我们把这一部分整体结构叫子层连接代表子层及其连接结构在每个编码器层都有两个子层这两个子层加上周围的链接结构就形成了两个子层连接结构。 2、子层连接结构 3、代码实现 import numpy as np from torch.autograd import Variable import copy from torch import tensor, softmax import math import torch.nn as nn import torch # 构建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) class PositionalEncoding(nn.Module):def __init__(self,d_model,dropout,max_len5000)::param d_model: 词嵌入的维度:param dropout: 随机失活置0比率:param max_len: 每个句子的最大长度也就是每个句子中单词的最大个数super(PositionalEncoding,self).__init__()self.dropout nn.Dropout(pdropout)pe torch.zeros(max_len,d_model) # 初始化一个位置编码器矩阵它是一个0矩阵矩阵的大小是max_len * d_modelposition torch.arange(0,max_len).unsqueeze(1) # 初始一个绝对位置矩阵 max_len * 1div_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 forward(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)def subsequent_mask(size)::param size: 生成向后遮掩的掩码张量参数 size 是掩码张量的最后两个维度大小它的最后两个维度形成一个方阵:return:attn_shape (1,size,size) # 定义掩码张量的形状subsequent_mask np.triu(np.ones(attn_shape),k 1).astype(uint8) # 定义一个上三角矩阵元素为1再使用其中的数据类型变为无符号8位整形return torch.from_numpy(1 - subsequent_mask) # 先将numpy 类型转化为 tensor再做三角的翻转将位置为 0 的地方变为 1将位置为 1 的方变为 0def attention(query, key, value, maskNone, dropoutNone)::param query: 三个张量输入:param key: 三个张量输入:param value: 三个张量输入:param mask: 掩码张量:param dropout: 传入的 dropout 实例化对象:return:d_model query.size(-1) # 得到词嵌入的维度取 query 的最后一维大小scores torch.matmul(query,key.transpose(-2,-1)) / math.sqrt(d_model) # 按照注意力公式将 query 和 key 的转置相乘这里是将 key 的最后两个维度进行转置再除以缩放系数得到注意力得分张量 scoresif mask is not None:scores torch.masked_fill(scores,mask 0,-1e9) # 使用 tensor 的 mask_fill 方法将掩码张量和 scores 张量中每一个位置进行一一比较如果掩码张量处为 0 ,则使用 -1e9 替换# scores scores.masked_fill(mask 0,-1e9)p_attn softmax(scores, dim -1) # 对 scores 的最后一维进行 softmax 操作使用 F.softmax 方法第一个参数是 softmax 对象第二个参数是最后一个维度得到注意力矩阵print(scores.shape ,scores.shape)if dropout is not None:p_attn dropout(p_attn)return torch.matmul(p_attn,value),p_attn # 返回注意力表示 class MultiHeadAttention(nn.Module):def __init__(self, head, embedding_dim , dropout0.1)::param head: 代表几个头的参数:param embedding_dim: 词向量维度:param dropout: 置零比率super(MultiHeadAttention, self).__init__()assert embedding_dim % head 0 # 确认一下多头的数量可以整除词嵌入的维度 embedding_dimself.d_k embedding_dim // head # 每个头获得词向量的维度self.head headself.linears nn.ModuleList([copy.deepcopy(nn.Linear(embedding_dim, embedding_dim)) for _ in range(4)]) # 深层拷贝4个线性层每一个层都是独立的保证内存地址是独立的分别是 Q、K、V以及最终的输出线性层self.attn None # 初始化注意力张量self.dropout nn.Dropout(pdropout)def forward(self, query, key, value, maskNone)::param query: 查询query [batch size, sentence length, d_model]:param key: 待查询key [batch size, sentence length, d_model]:param value: 待查询value [batch size, sentence length, d_model]:param mask: 计算相似度得分时的掩码设置哪些输入不计算到score中[batch size, 1, sentence length]:return:if mask is not None:mask mask.unsqueeze(1) # 将掩码张量进行维度扩充代表多头中的第 n 个头batch_size query.size(0)query, key, value [l(x).view(batch_size, -1, self.head, self.d_k).transpose(1, 2) for l, x in zip(self.linears, (query, key, value))] # 将1、2维度进行调换目的是让句子长度维度和词向量维度靠近这样注意力机制才能找到词义与句子之间的关系# 将每个头传递到注意力层x, self.attn attention(query, key, value, maskmask, dropoutself.dropout)# 得到每个头的计算结果是 4 维的张量需要形状的转换# 前面已经将1,2两个维度进行转置了所以这里要重新转置回来# 前面已经经历了transpose所以要使用contiguous()方法不然无法使用 view 方法x x.transpose(1, 2).contiguous() \.view(batch_size, -1, self.head * self.d_k)return self.linears[-1](x) # 在最后一个线性层中进行处理得到最终的多头注意力结构输出 class LayerNormalization(nn.Module):def __init__(self, features, eps1e-6)::param features: 词嵌入的维度:param eps: 出现在规范化公式的分母中防止分母为0super(LayerNormalization, self).__init__()# a 系数的默认值为1模型的参数self.a nn.Parameter(torch.ones(features))# b 系统的初始值为0模型的参数self.b nn.Parameter(torch.zeros(features))# 把 eps 传递到类中self.eps epsdef forward(self, x):# 在最后一个维度上求 均值并且输出维度保持不变mean x.mean(-1, keepdimTrue)std x.std(-1, keepdimTrue)return self.a * (x - mean) / (std self.eps) self.b import torch.nn as nn class SublayerConnection(nn.Module):def __init__(self, size, dropout0.1):super(SublayerConnection,self).__init__()# 实例化了一个 LN 对象self.norm LayerNormalization(size)self.dropout nn.Dropout(p dropout)def forward(self,x,sublayer)::param x: 接受上一个层或者子层的输入作为第一个参数:param sublayer: 该子层连接中的子层函数胡作为第二个参数:return:首先对输出进行规范化然后将结果交给子层处理之后对子层进行 dropout处理 \随机失活一些神经元来防止过拟合最后还有一个add操作 \因此存在跳跃连接所以是将输入x与dropout后的子层输出结果相加作为最终的子层连接输出return x self.dropout(sublayer(self.norm(x))) # 实例化参数 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) #-----------------------------------------位置编码 pe PositionalEncoding(d_model, dropout,max_len) pe_result pe(embr) x pe_result #-----------------------------------------多头注意力 size d_model 512 head 8 dropout 0.2 mask torch.zeros(2,4,4) self_attn MultiHeadAttention(head,d_model) 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) scores.shape  torch.Size([2, 8, 4, 4]) tensor([[[ 4.6194e00, -1.0555e01,  1.8985e00,  ..., -4.5931e00,-6.2920e00, -2.1740e01],[-2.8843e01, -6.2767e00,  1.6427e01,  ..., -9.3068e00,-3.1705e01,  4.2651e01],[-3.8404e01, -5.3660e00,  2.6868e01,  ...,  5.8316e01,-1.4166e01,  4.0424e-03],[-7.4723e00, -0.0000e00,  5.9630e00,  ..., -3.1421e01,3.1544e00, -4.5129e01]],[[-0.0000e00,  1.7151e00,  1.9417e01,  ...,  4.3568e01,6.7298e-01, -1.2038e01],[-6.5731e00,  1.0342e01, -4.5118e00,  ..., -6.2668e00,-2.7792e01, -2.6723e01],[ 2.1822e00, -5.9824e00, -3.2065e00,  ..., -2.2187e-01,3.2534e01, -6.3145e00],[ 4.4255e00, -1.4299e01,  3.5308e-01,  ...,  2.6856e01,-1.1513e01, -1.2965e00]]], grad_fnAddBackward0) torch.Size([2, 4, 512])
http://icebutterfly214.com/news/34464/

相关文章:

  • QCombox判断是否包含某项
  • 植物大战僵尸2下载教程:延续经典塔防,体验全新时空冒险
  • JavaWeb05-Web基础
  • Git分支合并
  • 多智能体设计模式和智能体框架,你会了么?
  • 新手入门常用的Dos命令
  • 基于MATLAB的B样条曲面绘制
  • 补题若干(5)
  • Go Web 编程快速入门 02 - 认识 net/http 与 Handler 接口 - 实践
  • 2025年热浸锌桥架厂家权威推荐榜单:不锈钢桥架/光伏锌铝镁桥架/喷塑桥架源头厂家精选
  • 鲜花:m 群 bot 随机一言摘抄
  • Tita 项目管理软件:驱动互联网企业高效运营与战略落地新引擎
  • 2025年现代风格卫生间隔断生产厂家权威推荐榜单:易清洁卫生间隔断/欧式卫生间隔断/养老院卫生间隔断源头厂家精选
  • locust基础
  • 荆门定制西林瓶灌装机费用解析,比标准款贵多少?
  • 基于Ubuntu2504部署OpenStack E版
  • 常见的无状态服务与典型有状态服务
  • 【IEEE出版 | 连续4年稳定EI检索】第五届新能源与电力工程国际学术会议(ICNEPE 2025)
  • 5分钟极简代码:轻松学会XXTEA加密解密
  • 【SPIE出版 | 快速见刊检索】第二届电子信息工程与智能通信国际研讨会(EIC 2025)
  • 中国数据集成平台TOP10综合评估报告(2025)
  • 告别重复“点点点”!基于Dify工作流,打造能思考、会决策的自主测试智能体
  • python异步协程
  • 软件工程团队作业2
  • EMS4100N芯祥科技USB3.1高速双向模拟开关芯片资料,可pin对pin替代ASW3410
  • 2025年空化液体电辅供热机组定制厂家权威推荐榜单:电锅炉/工业电锅炉/水分子物化供热机组源头厂家精选
  • 一份用pyhon生成word/wps文档的代码
  • LangChain PromptTemplate 全解析:从模板化提示到智能链构 - 教程
  • systemd-timedated.service Dbus参考
  • 2025年11月酵母抽提物品牌榜:五强横评与鲜味稳定性对比