nn.Embedding

在这个代码片段中,TokenEmbedding 类继承了 torch.nn.Embedding 类,并在 __init__ 方法中通过调用 super(TokenEmbedding, self).__init__(vocab_size, d_model, padding_idx=1) 来初始化父类 nn.Embedding。由于 TokenEmbedding 没有定义新的方法,默认情况下它会使用 nn.Embedding 的行为来提供返回值。

nn.Embedding 的行为

nn.Embedding 是一个嵌入层,用于将词汇表中的单词映射为稠密的向量表示。它的作用是查找输入索引对应的嵌入向量,具体步骤如下:

  1. 当你传入词汇的索引(整数)时,它会从权重矩阵中查找对应的嵌入向量。
  2. 它不需要定义一个显式的 forward 方法,因为调用 nn.Embedding 实例时,自动会执行这个查找操作。

使用方式

  1. 实例化 TokenEmbedding :实例化时会初始化一个嵌入矩阵,矩阵的维度是 vocab_size x d_model,其中 vocab_size 是词汇表的大小,d_model 是每个单词的向量维度。

  2. 调用实例:传入单词索引(整数序列),实例会返回对应的嵌入向量。

示例:

python 复制代码
import torch
import torch.nn as nn

class TokenEmbedding(nn.Embedding):
    def __init__(self, vocab_size, d_model):
        super(TokenEmbedding, self).__init__(vocab_size, d_model, padding_idx=1)

# 假设词汇表大小为 100,嵌入维度为 64
vocab_size = 100
d_model = 64

# 实例化 TokenEmbedding
embedding_layer = TokenEmbedding(vocab_size, d_model)

# 创建输入张量,表示单词的索引
input_indices = torch.LongTensor([2, 5, 10])

# 调用实例,将词汇索引转换为嵌入向量
output = embedding_layer(input_indices)
print(output.shape)  # 输出形状为 (3, 64),因为输入中有 3 个单词,每个单词的嵌入向量是 64 维

解释:

  • vocab_size: 词汇表的大小,即可以表示多少个不同的单词。
  • d_model: 每个单词的嵌入向量的维度。
  • padding_idx=1: 用于指定填充标记的索引,通常是为了忽略填充标记在训练中的影响。

在这个类中,TokenEmbedding 类实际上没有显式返回值的方法,但是通过调用 __call__ 方法(继承自 nn.Embedding),它会查找并返回对应的嵌入向量。

相关推荐
ZWaruler4 分钟前
二: 字典及函数的使用
python
蚰蜒螟14 分钟前
深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)
开发语言·jvm·python
墨绿色的摆渡人28 分钟前
pytorch小记(二十):深入解析 PyTorch 的 `torch.randn_like`:原理、参数与实战示例
人工智能·pytorch·python
英英_1 小时前
python 自动化教程
开发语言·python·自动化
万能程序员-传康Kk1 小时前
【Python+flask+mysql】网易云数据可视化分析(全网首发)
python·mysql·信息可视化·数据分析·flask·可视化·网易云
先做个垃圾出来………1 小时前
汉明距离(Hamming Distance)
开发语言·python·算法
测试者家园1 小时前
用 VS Code / PyCharm 编写你的第一个 Python 程序
ide·vscode·python·职场和发展·零基础·pycharm·零基础学python
墨绿色的摆渡人2 小时前
pytorch小记(二十一):PyTorch 中的 torch.randn 全面指南
人工智能·pytorch·python
大叔_爱编程2 小时前
p024基于Django的网上购物系统的设计与实现
python·django·vue·毕业设计·源码·课程设计·网上购物系统
一个天蝎座 白勺 程序猿2 小时前
Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)
redis·爬虫·python·selenium·scrapy·云原生·k8s