我正在构建一个推荐系统,在该系统中,我会根据每个用户的商品购买历史来预测他们的最佳商品。我有userID和itemID,以及userID购买了多少itemID。我有数百万的用户和数千种产品。并非所有产品都已购买(有些产品尚未有人购买)。由于用户和物品很大,所以我不想使用一键式矢量。我正在使用pytorch,我想创建和训练嵌入,以便可以对每个用户项对进行预测。我遵循了本教程https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html。如果准确地假设正在对嵌入层进行训练,那我应该通过model.parameters()方法检索学习到的权重,还是应该使用embedding.data.weight选项?
答案 0 :(得分:2)
exports.command = function() {
this
.assert.containsText('@siteFooterCompanyInfo', 'Parkers is a trading name of Bauer Consumer Media Limited.')
.assert.containsText('@siteFooterCompanyInfo', 'Bauer Consumer Media Limited are authorised and regulated by the Financial Conduct Authority.');
return this;
};
返回您model.parameters()
中的所有parameters
,包括model
。
因此,您embeddings
中的所有parameters
都将移交给model
(下面的行),稍后将在致电{{1} }-是的,您的optimizer
与网络的所有其他optimizer.step()
一起受到训练。
(您也可以通过设置embeddings
冻结某些图层,但是并非如此)。
parameters
这样做,您可以看到您的嵌入权重也是embedding.weight.requires_grad = False
类型:
# summing it up:
# this line specifies which parameters are trained with the optimizer
# model.parameters() just returns all parameters
# embedding class weights are also parameters and will thus be trained
optimizer = optim.SGD(model.parameters(), lr=0.001)
这将输出权重的类型,即Parameter
:
import torch
embedding_maxtrix = torch.nn.Embedding(10, 10)
print(type(embedding_maxtrix.weight))
我不确定检索是什么意思。您是要获得单个矢量,还是只希望将整个矩阵保存起来,还是要做其他事情?
Parameter
输出:
<class 'torch.nn.parameter.Parameter'>
我希望这能回答您的问题,您也可以查看文档,在那里也可以找到一些有用的示例。