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

(三)自然语言处理笔记——Transformer

(三)自然语言处理笔记——Transformer

  • 1、Transformer结构
  • 2、Transformer输入部分代码实现
  • 3、Transformer编码器部分
    • 掩码张量
    • 自注意力机制模块

1、Transformer结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、Transformer输入部分代码实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

import torch
import torch.nn as nn
import math
from torch.autograd import Variable
import matplotlib.pyplot as plt
import numpy as np# Embeddings 类 实现思路分析
# 1 init函数 准备1个层 self.lut层 def __init__(self, d_model, vocab)
# 2 forward(x)函数 self.lut(x) * math.sqrt(self.d_model)
class Embeddings(nn.Module):def __init__(self, d_model, vocab):super(Embeddings, self).__init__()self.d_model = d_modelself.vocab = vocab# self.lut层self.lut = nn.Embedding(vocab, d_model)def forward(self, x):x = self.lut(x) * math.sqrt(self.d_model)return  xdef dm01_test_Embeddings():# 1 准备数据x = torch.tensor([[100, 2, 421, 508], [491, 998, 1, 221]])# 2 实例化文本词嵌入层myembeddings = Embeddings(512, 1000)   # 传入的是嵌入的维度,单词数量print('myembeddings-->', myembeddings)# 3 给模型喂数据 [2,4] ---> [2,4,512]embed_res = myembeddings(x)print('embed_res-->', embed_res.shape, embed_res)pass# 位置编码器类 PositionalEncoding 实现思路分析
# 1 init函数  (self, d_model, dropout, max_len=5000)
#   super()函数 定义层self.dropout
#   定义位置编码矩阵pe  定义位置列-矩阵position 定义变化矩阵div_term 套公式# position = torch.arange(0, max_len).unsqueeze(1)# div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0)/d_model))
#   位置列-矩阵*变化矩阵 阿达码积 my_matmulres, 给pe矩阵偶数列奇数列赋值 pe[:, 0::2] pe[:, 1::2]
#   pe矩阵注册到模型缓冲区 pe.unsqueeze(0)三维 self.register_buffer('pe', pe)
# 2 forward(self, x) 返回self.dropout(x)
#   给x数据添加位置特征信息 x = x + Variable( self.pe[:,:x.size()[1]], requires_grad=False)
class PositionalEncoding(nn.Module):def __init__(self, d_model,  dropout=0.1, max_len=5000):super(PositionalEncoding, self).__init__()self.dropout = nn.Dropout(p=dropout)#  定义位置编码矩阵pepe = torch.zeros(max_len, d_model)# 定义位置列-矩阵position [60,1]position = torch.arange(0, max_len).unsqueeze(1)# 定义变化矩阵div_term 套公式 [1,256]div_term = torch.exp( torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model) )#   位置列-矩阵*变化矩阵 阿达码积 my_matmulres, 给pe矩阵偶数列奇数列赋值 pe[:, 0::2] pe[:, 1::2]my_matmulres = position * div_term # [60,1] * [1,256]==> [60, 256]pe[:, 0::2] = torch.sin(my_matmulres)pe[:, 1::2] = torch.cos(my_matmulres)#   pe矩阵注册到模型缓冲区 pe.unsqueeze(0)三维 self.register_buffer('pe', pe)pe = pe.unsqueeze(0) #[60, 256]--> [1,60,256]self.register_buffer('pe', pe)def forward(self, x):tmp = x.size()[1]x = x + Variable( self.pe[:, :x.size()[1]], requires_grad=False )return  xdef dm02_test_PositionalEncoding():# 1 准备数据x = torch.tensor([[100, 2, 421, 508], [491, 998, 1, 221]])# 2 实例化文本词嵌入层myembeddings = Embeddings(512, 1000)print('myembeddings-->', myembeddings)# 3 给模型喂数据 [2,4] ---> [2,4,512]embed_res = myembeddings(x)print('embed_res-->', embed_res.shape, embed_res)# 4 添加位置信息mypositionalencoding = PositionalEncoding(d_model=512,  dropout=0.1, max_len=60)print('mypositionalencoding-->', mypositionalencoding)pe_res = mypositionalencoding(embed_res)print('添加位置特征以后的x-->', pe_res.shape)if __name__ == '__main__':dm01_test_Embeddings()dm02_test_PositionalEncoding()print('输入部分 End')

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import torch
import torch.nn as nn
import math
from torch.autograd import Variable
import matplotlib.pyplot as plt
import numpy as np# Embeddings 类 实现思路分析
# 1 init函数 准备1个层 self.lut层 def __init__(self, d_model, vocab)
# 2 forward(x)函数 self.lut(x) * math.sqrt(self.d_model)
class Embeddings(nn.Module):def __init__(self, d_model, vocab):super(Embeddings, self).__init__()self.d_model = d_modelself.vocab = vocab# self.lut层self.lut = nn.Embedding(vocab, d_model)def forward(self, x):x = self.lut(x) * math.sqrt(self.d_model)return  xdef dm01_test_Embeddings():# 1 准备数据x = torch.tensor([[100, 2, 421, 508], [491, 998, 1, 221]])# 2 实例化文本词嵌入层myembeddings = Embeddings(512, 1000)   # 传入的是嵌入的维度,单词数量print('myembeddings-->', myembeddings)# 3 给模型喂数据 [2,4] ---> [2,4,512]embed_res = myembeddings(x)print('embed_res-->', embed_res.shape, embed_res)pass# 位置编码器类 PositionalEncoding 实现思路分析
# 1 init函数  (self, d_model, dropout, max_len=5000)
#   super()函数 定义层self.dropout
#   定义位置编码矩阵pe  定义位置列-矩阵position 定义变化矩阵div_term 套公式# position = torch.arange(0, max_len).unsqueeze(1)# div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0)/d_model))
#   位置列-矩阵*变化矩阵 阿达码积 my_matmulres, 给pe矩阵偶数列奇数列赋值 pe[:, 0::2] pe[:, 1::2]
#   pe矩阵注册到模型缓冲区 pe.unsqueeze(0)三维 self.register_buffer('pe', pe)
# 2 forward(self, x) 返回self.dropout(x)
#   给x数据添加位置特征信息 x = x + Variable( self.pe[:,:x.size()[1]], requires_grad=False)
class PositionalEncoding(nn.Module):def __init__(self, d_model,  dropout=0.1, max_len=5000):super(PositionalEncoding, self).__init__()self.dropout = nn.Dropout(p=dropout)#  定义位置编码矩阵pepe = torch.zeros(max_len, d_model)# 定义位置列-矩阵position [60,1]position = torch.arange(0, max_len).unsqueeze(1)# 定义变化矩阵div_term 套公式 [1,256]div_term = torch.exp( torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model) )#   位置列-矩阵*变化矩阵 阿达码积 my_matmulres, 给pe矩阵偶数列奇数列赋值 pe[:, 0::2] pe[:, 1::2]my_matmulres = position * div_term # [60,1] * [1,256]==> [60, 256]pe[:, 0::2] = torch.sin(my_matmulres)pe[:, 1::2] = torch.cos(my_matmulres)#   pe矩阵注册到模型缓冲区 pe.unsqueeze(0)三维 self.register_buffer('pe', pe)pe = pe.unsqueeze(0) #[60, 256]--> [1,60,256]self.register_buffer('pe', pe)def forward(self, x):tmp = x.size()[1]x = x + Variable( self.pe[:, :x.size()[1]], requires_grad=False )return  xdef dm02_test_PositionalEncoding():# 1 准备数据x = torch.tensor([[100, 2, 421, 508], [491, 998, 1, 221]])# 2 实例化文本词嵌入层myembeddings = Embeddings(512, 1000)print('myembeddings-->', myembeddings)# 3 给模型喂数据 [2,4] ---> [2,4,512]embed_res = myembeddings(x)print('embed_res-->', embed_res.shape, embed_res)# 4 添加位置信息mypositionalencoding = PositionalEncoding(d_model=512,  dropout=0.1, max_len=60)print('mypositionalencoding-->', mypositionalencoding)pe_res = mypositionalencoding(embed_res)print('添加位置特征以后的x-->', pe_res.shape)if __name__ == '__main__':dm01_test_Embeddings()dm02_test_PositionalEncoding()print('输入部分 End')

3、Transformer编码器部分

掩码张量

在这里插入图片描述
在这里插入图片描述

def dm01_test_nptriu():# m:表示一个矩阵# K:表示对角线的起始位置(k取值默认为0)# return: 返回函数的上三角矩阵# 测试产生上三角矩阵print('k=1\n', np.triu([[1, 1, 1, 1, 1],[2, 2, 2, 2, 2],[3, 3, 3, 3, 3],[4, 4, 4, 4, 4],[5, 5, 5, 5, 5]], k=1))print('k=0\n', np.triu([[1, 1, 1, 1, 1],[2, 2, 2, 2, 2],[3, 3, 3, 3, 3],[4, 4, 4, 4, 4],[5, 5, 5, 5, 5]], k=0))print('k=-1\n', np.triu([[1, 1, 1, 1, 1],[2, 2, 2, 2, 2],[3, 3, 3, 3, 3],[4, 4, 4, 4, 4],[5, 5, 5, 5, 5]], k=-1))pass

在这里插入图片描述

在这里插入图片描述

自注意力机制模块

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/600761.html

相关文章:

  • iOS性能分析工具,有UI卡顿、app启动、内存、webview等性能优化解析
  • 电商网站建设 数商云招商码头无忧查询系统
  • 开源 Objective-C IOS 应用开发(三)第一个iPhone的APP
  • (11)(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs(二)
  • Google Chrome v142.0.7444.135 便携增强版
  • [Windows] PDF文件浏览OCR工具1.0
  • 2025人形机器人产业链全景分析报告:核心技术与市场趋势|附130+份报告PDF、数据、可视化模板汇总下载
  • 长春教做网站带维护的培训机构淮安网站建设
  • 图文详述:MySQL的下载、安装、配置、使用
  • 把课本内容抄到PPT上就行吗?会不会太乱?
  • MySQL XtraBackup 使用文档(全量 + 增量备份与恢复)
  • 在k8s中seaweedfs中,weed 命令详细举例说明
  • 动易 网站统计 首次打开阿里云服务器学生
  • 【底层奥秘与性能艺术】让 RTOS 在 48 MHz MCU 上跑出 0.5 µs 上下文切换——一场从零开始的嵌入式“时间革命”
  • Win11找不到组策略编辑器(gpedit.msc)
  • [智能体设计模式]第2章-路由(Route)
  • [智能体设计模式] 第五章 :函数调用
  • PixPin(截图工具) v2.2.0.0
  • 2023年混沌学堂JAVA课程(1-7期)+专题课
  • 备战算法专家--要点 1
  • 湖南服装网站建设东方财富网官方网站首页
  • 物业网站建设方案开发一个直播app
  • 设计模式实战篇(一):彻底搞懂 Singleton 单例模式
  • 什么是电子商务网站建设网站建设的一些背景图片
  • 一个有 IP 的服务端监听了某个端口,那么他的 TCP 最大链接数是多少
  • K8s常用排障调试工具 入侵排查 kubectl debug 命令详解
  • yield(放弃优先权)
  • 基于MATLAB的噪声图像处理方案
  • 做动态logo网站做网站有底薪吗
  • C语言编译器最新版 | 全面提升性能与兼容性