Я следую этому руководству https://pytorch.org/tutorials/beginner/nlp/deep_learning_tutorial.html#example-logistic-regression-bag-of-words-classifier
nn.Linear(vocab_size, num_labels)
означает, что форма матрицы num_labels x vocab_size
размеры bow_vector равны 1 x vocab_size
, а ожидаемый ввод для nn.linear — batch_size x features
Теперь мы умножаем матрицу num_labels x vocab_size
на 1 x vocab_size
. Таким образом, размеры не совпадают для умножения матриц. Что мне здесь не хватает? : мышление:
https://discuss.pytorch.org/t/matrix-multiplication-dimentions-confusing/79376?u=abhigenie92
Вы недопонимаете в
nn.Linear
. Позвольте мне немного указать на это.nn.Linear(vocab_size, num_labels)
не означает, что матрица имеет формуnum_labels x vacab_size
.Оригинал
nn.Linear(input_dim, output_dim, bias=True)
. Допустим, у вас есть 3 точки в 3D-пространстве, и вы хотите спроецировать эти точки в 2D-пространство. Итак, вы просто создаете линейный слой, который может вам в этом помочь =>nn.Linear(3, 2, bias=True)
.Примеры:
По сути,
nn.Linear()
просто помогает вам создать функцию, которая может делать проекцию.Так что вы можете задаться вопросом, как
nn.Linear
может помочь вам сделать проекцию. Что ж, это довольно просто в математике, когда проекция простоy = Wx + b
илиy = Wx
(в случае смещения = False), гдеW
— вес, аb
— смещение, и оба они будут созданыnn.Linear
случайным образом. Проверьте это:================
Соответствуя вашему случаю, BowClassifier, как я понимаю, просто пытается классифицировать предложение по конечным классам. Один из самых простых способов сделать это — использовать один горячий вектор, имеющий форму
n x vocab
.n
означает, что у вас естьn
предложение, но словарь во втором измерении теперь играет роль характеристик, которые представляют каждое предложение.Теперь вы хотите классифицировать n предложений в класс
num_labels
, просто сделайте проекцию.