torch.nn.Embedding 和 torch.nn.Linear 的区别
torch.nn.Embedding
和 torch.nn.Linear
层是 PyTorch 中两种不同的神经网络层,它们各自有不同的用途和应用场景。下面我将详细介绍这两种层的区别。
torch.nn.Embedding
-
用途:
torch.nn.Embedding
主要用于将离散的类别数据(通常是整数索引)映射到连续的向量空间。这对于处理词嵌入、类别特征等非常有用。
-
参数:
num_embeddings
: 整数,表示词汇表的大小,即有多少个不同的嵌入向量。embedding_dim
: 整数,表示每个嵌入向量的维度。
-
输入:
- 输入是一个一维或二维的整数张量,每个元素代表词汇表中的一个索引。
-
输出:
- 输出是一个与输入形状相同的张量,但每个索引都被替换为其对应的嵌入向量。
-
示例:
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
-
用途:
torch.nn.Linear
用于实现全连接层,它可以接受任意维数的输入,并将其映射到另一个维数的空间。常用于分类、回归等任务的最后几层。
-
参数:
in_features
: 输入向量的维度。out_features
: 输出向量的维度。
-
输入:
- 输入是一个二维张量,每一行代表一个样本,每一列表示一个特征。
-
输出:
- 输出是一个二维张量,其形状取决于输入张量的大小和
out_features
的值。
- 输出是一个二维张量,其形状取决于输入张量的大小和
-
示例:
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
层来构建神经网络的最后几层,以进行最终的预测。
- 使用