如何学习Pytorch中的嵌入并在以后检索

时间:2018-11-02 19:32:00

标签: pytorch embedding collaborative-filtering

我正在构建一个推荐系统,在该系统中,我会根据每个用户的商品购买历史来预测他们的最佳商品。我有userID和itemID,以及userID购买了多少itemID。我有数百万的用户和数千种产品。并非所有产品都已购买(有些产品尚未有人购买)。由于用户和物品很大,所以我不想使用一键式矢量。我正在使用pytorch,我想创建和训练嵌入,以便可以对每个用户项对进行预测。我遵循了本教程https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html。如果准确地假设正在对嵌入层进行训练,那我应该通过model.parameters()方法检索学习到的权重,还是应该使用embedding.data.weight选项?

1 个答案:

答案 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'>

我希望这能回答您的问题,您也可以查看文档,在那里也可以找到一些有用的示例。

https://pytorch.org/docs/stable/nn.html#torch.nn.Embedding