torch.nn.Embedding类(nn.Module)详解(还未写完)

torch.nn.Embedding类(nn.Module)

  • torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None, device=None, dtype=None)

    num_embeddings是输入的字典大小,如果你输入里面有10个不一样的元素,然后你的字典设置为9,会导致如下错误发生

    >>> x = torch.arange(10).reshape(5,-1)  # 输入有10个不一样的元素
    >>> embedding = torch.nn.Embedding(9, 3)  # Embedding层字典大小只有9<10导致错误
    >>> embedding(x)
    Traceback (most recent call last):
      File "D:\Anaconda\envs\first_semester_of_master\lib\site-packages\IPython\core\interactiveshell.py", line 3553, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-48-c328606b6f70>", line 1, in <module>
        embedding(x)
      File "D:\Anaconda\envs\first_semester_of_master\lib\site-packages\torch\nn\modules\module.py", line 1130, in _call_impl
        return forward_call(*input, **kwargs)
      File "D:\Anaconda\envs\first_semester_of_master\lib\site-packages\torch\nn\modules\sparse.py", line 160, in forward
        self.norm_type, self.scale_grad_by_freq, self.sparse)
      File "D:\Anaconda\envs\first_semester_of_master\lib\site-packages\torch\nn\functional.py", line 2199, in embedding
        return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
    IndexError: index out of range in self
    

    embedding_dim输出的每个词向量的维度

    >>> # 接上面
    >>> embedding = torch.nn.Embedding(10, 3)
    >>> embedding(x).shape
    torch.Size([5, 2, 3])
    

    embedding = torch.nn.Embedding(10, 3)的内部权重的结构是 ( 10 × 3 ) (10\times3) (10×3)

    即针对每个x的值如1,寻找权重中的weight[1,:]使用这个做结果第三维的值

    例子:

    >>> em=torch.rand(3,2)
    >>> em
    Out: 
    tensor([[0.8452, 0.5519],  # 0对应向量
            [0.7074, 0.3604],  # 1对应向量
            [0.8119, 0.3996]]) # 2对象向量
    >>> input=torch.tensor([0,1,2,1])
    >>> torch.nn.functional.embedding(input,em)
    Out: 
    tensor([[0.8452, 0.5519],  # 0
            [0.7074, 0.3604],  # 1
            [0.8119, 0.3996],  # 2
            [0.7074, 0.3604]])  # 1
    
  • 后面的参数用到再说

### Python `torch.nn` 模块的功能介绍 #### 关键和功能概述 `torch.nn` 是 PyTorch 中用于构建神经网络的核心模块。该模块提供了丰富的工具来简化深度学习模型的设计与实现过程[^1]。 - **Parameter**: 表示张量参数,这些参数会在训练过程中被自动优化。 - **Module**: 所有神经网络层的基础,定义了前向传播逻辑以及如何初始化权重等操作。 - **Sequential**: 容器,允许按顺序堆叠多个层形成更复杂的结构。 - **ModuleList** 和 **ModuleDict**: 似于标准列表或字典的数据容器,专门用来存储子模块以便管理和调用。 - **ParameterList** 及 **ParameterDict**: 同样作为特殊型的集合体,不过它们仅限保存参数对象而非整个模块实例。 #### Embedding详解 特别值得一提的是 `Embedding` 这一层,在处理自然语言处理任务时尤为有用。它能够将离散型输入(比如单词索引)映射到连续空间内的稠密表示形式——即所谓的词嵌入(word embeddings)[^2]。 ```python import torch from torch import nn embedding = nn.Embedding(num_embeddings=10, embedding_dim=3) input_tensor = torch.LongTensor([1, 2, 4, 5]) output_embedding = embedding(input_tensor) print(output_embedding.size()) ``` 这段简单的例子展示了如何创建一个具有指定大小词汇表(`num_embeddings`)和维度(`embedding_dim`)的嵌入矩阵,并查询特定位置对应的向量表达。 #### 数据筛选技巧展示 对于某些应用场景下可能需要从预测结果集中提取满足条件的部分数据项来进行进一步分析或者计算损失函数等情况,则可以采用如下方式完成: ```python pos_mask = ... # 假设这里已经得到了正样本的位置掩码 loc_preds = ... # 预测框坐标信息 pos_loc_preds = loc_preds[pos_mask].view(-1, 4) # 将符合条件的结果重新整形为二维数组[#pos,4][^4] ``` 上述代码片段说明了怎样利用布尔索引来选取目标检测任务里定位分支产生的有效候选区域坐标值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大侠月牙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值