首页 > 其他分享 >Transformer-Embedding

Transformer-Embedding

时间:2024-07-23 16:50:56浏览次数:10  
标签:__ Transformer self torch pos Embedding device model

导包
#导入包
import torch
from torch import nn
import torch.nn.functional as f 
import math 

TokenEmbedding
#首先定义token embadding
from torch import Tensor
"""
    将输入词汇表的索引转换成指定维度的Embedding
"""
class TokenEmbedding(nn.Embedding):
    def __init__(self,vocab_size,d_model):
        """  
        初始化TokenEmbedding类。  
  
        参数:  
            vocab_size (int): 词汇表的大小。  
            d_model (int): Embedding的维度。  
  
        注意:  
            此类自动将索引为1的词汇视为填充词,并将其嵌入向量初始化为全零。  
            如果你不希望这样,可以手动设置padding_idx参数,或者将其设置为None。  
        """  
        super(TokenEmbedding,self).__init__(vocab_size,d_model,padding_idx=1)
PositionalEmbedding

class PositionalEmbedding(nn.Module):
    def __init__(self,d_model,max_len,device):
        """
            初始化位置矩阵
        """
        super(PositionalEmbedding,self).__init__()
        #初始化0矩阵
        self.encoding = torch.zeros(max_len,d_model,device=device)
        #位置编码不需要优化,就不需要梯度更新
        self.encoding.requires_grad = False
        #定义pos,生成位置索引
        pos = torch.arange(0,max_len)
        pos = pos.to(device)
        #类型转换为浮点型便于计算,在进行维度拓展为二维张量,利用广播机制自动对其
        pos = pos.float().unsqueeze(dim=1)
        #根据公式计算
        frequencies_indices = torch.arange(0, d_model, step=2, device=device).float()
        frequencies = 1.0/torch.pow(10000.0,frequencies_indices//d_model).unsqueeze(dim=0)
        self.encoding[:,0::2] = torch.sin(pos*frequencies)
        self.encoding[:,1::2] = torch.cos(pos*frequencies)
    def forward(self,x):
        #获取批量大小和序列长度
        batch_size,seq_len = x.size()
        return self.encoding[:seq_len,:]
TransformerEmbedding
class TransformerEmbedding(nn.Module):
    def __init__(self,vocab_size,d_model,max_len,drop_prob,device):
        super(TransformerEmbedding,self).__init__()
        self.tok_emb = TokenEmbedding(vocab_size-vocab_size,d_model=d_model)
        self.pos_emb = PositionalEmbedding(d_model=d_model,max_len=max_len,device=device)
        self.drop_out=nn.Dropout(p=drop_prob)
    
    def forward(self,x):
        tok_emb = self.tok_emb(x)
        pos_emb = self.pos_emb(x)
        return self.drop_out(tok_emb+pos_emb)

标签:__,Transformer,self,torch,pos,Embedding,device,model
From: https://www.cnblogs.com/qian-li-xju/p/18317760

相关文章

  • 魔改Transformer!9种提速又提效的模型优化方案
    Transformer目前已经成为人工智能领域的主流模型,应用非常广泛。然而Transformer中注意力机制计算代价较高,随着序列长度的增加,这个计算量还会持续上升。为了解决这个问题,业内出现了许多Transformer的魔改工作,以优化Transformer的运行效率。我这次就给大家分享9篇对Transform......
  • 一文看懂AI的 Transformer 架构!
    1AI的转换器是啥?转换器,一种将输入序列转换或更改为输出序列的神经网络架构。它们通过学习上下文和跟踪序列组件之间的关系来做到这一点。例如,请考虑以下输入序列:“天空是什么颜色的?”转换器模型会使用内部数学表示法来识别颜色、天空和蓝色这三个词之间的相关性和关系。......
  • 快速学习一个算法,Transformer
    今天给大家介绍一个强大的算法模型,TransformerTransformer模型是由Vaswani等人在2017年提出的一种用于自然语言处理的深度学习模型,特别擅长于处理序列到序列的任务,如机器翻译、文本生成等。今天,我们主要从编码的角度来进行说明。Transformer模型架构Transformer......
  • 一文看懂AI的 Transformer 架构!
    1AI的转换器是啥?转换器,一种将输入序列转换或更改为输出序列的神经网络架构。它们通过学习上下文和跟踪序列组件之间的关系来做到这一点。例如,请考虑以下输入序列:“天空是什么颜色的?”转换器模型会使用内部数学表示法来识别颜色、天空和蓝色这三个词之间的相关性和关系。利用这......
  • Transformer 模型和Attention注意力机制学习笔记
    文章目录Transformer模型结构注意力机制ScaledDot-ProductAttention缩放点注意力机制工作流程并行机制Multi-HeadAttention多头注意力机制工作流程Embedding单词Embedding位置编码PositionalEncodingEncoderAdd&NormFeedForwardNetworkDecoderMaskedMul......
  • Hugging Face基础:简单讲解Transformer模型和结构,小白也能看懂,每个词都给你解释清楚了!
    1.Transformer是什么Transformer 是一个基于自注意力机制(Self-attentionmechanism)的神经网络架构,是由2017年的论文《AttentionisAllYouNeed》中提出的,为自然语言处理(NaturalLanguageProcessing)领域带来了新的模型架构。他是一种seq2seq模型(SequencetoSequenceMo......
  • 基于Vision Transformer的mini_ImageNet图片分类实战
    【图书推荐】《PyTorch深度学习与计算机视觉实践》-CSDN博客PyTorch计算机视觉之VisionTransformer整体结构-CSDN博客mini_ImageNet数据集简介与下载mini_ImageNet数据集节选自ImageNet数据集。ImageNet是一个非常有名的大型视觉数据集,它的建立旨在促进视觉识别研究。Imag......
  • 无法再现 Transformer 库的 ViTImageProcessor 预处理
    我正在编写一个用于预处理图像的独立代码image_processing_vit但是,我的结果与图书馆的结果不同。以下代码包含两部分:(1)不使用变压器,(2)使用变压器。我不知道我错过了什么。我已阅读代码+询问副驾驶,但它不能解决问题。请帮助我!谢谢。importcv2importnump......
  • Transformer多头自注意力及掩码机制详解
    系列文章目录文章目录系列文章目录@[TOC](文章目录)前言一、self-attention1.注意力机制2.自注意力机制3.代码实现二、掩码机制1.原理介绍2.代码实现三、多头注意力模块1.原理介绍2.代码实现前言在本文中我们重点介绍Transformer中的掩码机制及多头自注......
  • 如何在 8 个 GPU 上并行化 Transformer 模型进行机器翻译?
    我正在尝试使用变压器模型以几乎与原始文章相同的方式执行机器翻译。虽然该模型运行得相当好,但它需要更多的计算资源。为了解决这个问题,我在一台具有8个GPU处理器的计算机上运行了该模型,但我缺乏这方面的经验。我尝试对并行化进行必要的调整:transformer=nn.DataParallel......