torch.nn.Embedding 和 torch.nn.Linear 的区别

torch.nn.Embedding 和 torch.nn.Linear 的区别




torch.nn.Embeddingtorch.nn.Linear 层是 PyTorch 中两种不同的神经网络层,它们各自有不同的用途和应用场景。下面我将详细介绍这两种层的区别。

torch.nn.Embedding

  1. 用途:

    • torch.nn.Embedding 主要用于将离散的类别数据(通常是整数索引)映射到连续的向量空间。这对于处理词嵌入、类别特征等非常有用。
  2. 参数:

    • num_embeddings: 整数,表示词汇表的大小,即有多少个不同的嵌入向量。
    • embedding_dim: 整数,表示每个嵌入向量的维度。
  3. 输入:

    • 输入是一个一维或二维的整数张量,每个元素代表词汇表中的一个索引。
  4. 输出:

    • 输出是一个与输入形状相同的张量,但每个索引都被替换为其对应的嵌入向量。
  5. 示例:

    vocab_size = 10000
    output_dim = 300
    token_embedding_layer = torch.nn.Embedding(vocab_size, output_dim)
    
    input_ids = torch.tensor([100, 200, 300, 400])  # 示例输入
    embeddings = token_embedding_layer(input_ids)
    print(embeddings.shape)  # 输出形状将是 (4, 300)
    

torch.nn.Linear

  1. 用途:

    • torch.nn.Linear 用于实现全连接层,它可以接受任意维数的输入,并将其映射到另一个维数的空间。常用于分类、回归等任务的最后几层。
  2. 参数:

    • in_features: 输入向量的维度。
    • out_features: 输出向量的维度。
  3. 输入:

    • 输入是一个二维张量,每一行代表一个样本,每一列表示一个特征。
  4. 输出:

    • 输出是一个二维张量,其形状取决于输入张量的大小和 out_features 的值。
  5. 示例:

    input_dim = 300
    output_dim = 10
    linear_layer = torch.nn.Linear(input_dim, output_dim)
    
    input_tensor = torch.randn(4, input_dim)  # 示例输入
    output = linear_layer(input_tensor)
    print(output.shape)  # 输出形状将是 (4, 10)
    

总结

  • torch.nn.Embedding:

    • 用于将整数索引映射到连续向量空间。
    • 输入是一个整数索引的张量。
    • 输出是一个连续向量的张量。
  • torch.nn.Linear:

    • 用于实现全连接层,可以将任意维数的输入映射到另一个维数的空间。
    • 输入是一个连续向量的张量。
    • 输出是一个连续向量的张量。

应用场景

  • 词嵌入:

    • 使用 torch.nn.Embedding 来将词汇表中的单词索引映射到词向量空间。
    • 例如,在文本分类任务中,可以使用 torch.nn.Embedding 来获取每个单词的词向量,然后使用 torch.nn.Linear 层来进行分类。
  • 分类/回归任务:

    • 使用 torch.nn.Linear 层来构建神经网络的最后几层,以进行最终的预测。
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值