矩阵乘法维度混乱

问题描述 投票:0回答:1

我正在按照这个教程 https:/pytorch.orgtutorialsbeginnernlpdeep_learning_tutorial.html#example-logistic-regression-bag-of-words-classifier。

nn.Linear(vocab_size, num_labels)表示矩阵形状为 num_labels x vocab_size

弓的向量尺寸是 1 x vocab_size 而nn.linear的预期输入是 batch_size x features

现在,我们要乘以 num_labels x vocab_size 矩阵 1 x vocab_size. 因此,矩阵乘法的维度不匹配。我在这里遗漏了什么? :思考。

https:/discuss.pytorch.orgtmatrix -multiplication -dimentions -confusing79376?u=abhigenie92

python pytorch torch torchtext
1个回答
0
投票

你误解的地方 nn.Linear. 让我给你指出一点。

nn.Linear(vocab_size, num_labels) 并不意味着矩阵形状是 num_labels x vacab_size.

原文是 nn.Linear(input_dim, output_dim, bias=True). 比方说,你有3个点在3D空间,你想把这些点投影到2D空间。所以,你只需创建一个线性层,可以帮助你做到这一点=&gt。nn.Linear(3, 2, bias=True).

例子。

linear_function = nn.Linear(3, 2, bias=True) # you have just created a function
a_3D_point = torch.Tensor([[1, 1, 1]])
a_2D_point = linear_function(a_3D_point)

基本上: nn.Linear() 只是帮你创建了一个可以做投影的函数。

所以你可能会想知道如何 nn.Linear 可以帮你做投影。嗯,这在数学上是很容易的,当投影只是 y = Wx + by = Wx (如果偏向=False),其中包括 W 是重量和 b 是偏向性的,它们都将被随机地创造出来,由 nn.Linear. 检查出来的。

print(list(linear_function.parameters()))  # Unchecked since I use my iPad to write this answer

================

映射到你的案例中,我的理解,BowClassifier只是试图将句子分为有限类。其中最简单的方法是使用一个热向量,它的形状是这样的。n x vocab.

n 表示你有 n 句子,但现在第二个维度中的词汇扮演了代表每个句子的特征的角色。

你现在想把n个句子分类为 num_labels 类,只需进行投影。

input = ...  # shape: [n x vocab]
classify_fn = nn.Linear(vocab, num_labels)
output = classify_fn(input)

# sigmoid or softmax to get the probability here
...
© www.soinside.com 2019 - 2024. All rights reserved.