Min*_*ina 2 embedding collaborative-filtering pytorch
我正在构建一个推荐系统,根据他们的商品购买历史,我可以预测每个用户的最佳商品。我有 userIDs 和 itemIDs 以及 userID 购买了多少 itemID。我有数百万用户和数以千计的产品。并非所有产品都被购买(有些产品还没有人购买)。由于用户和项目很大,我不想使用单热向量。我正在使用 pytorch,我想创建和训练嵌入,以便我可以对每个用户-项目对进行预测。我跟着本教程https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html. 如果准确假设正在训练嵌入层,那么我是通过 model.parameters() 方法检索学习的权重还是应该使用 embedding.data.weight 选项?
model.parameters()返回parameters您的所有model,包括embeddings.
因此parameters,您的所有这些model都被移交给optimizer (下面的行),稍后将在调用时进行培训optimizer.step()- 所以是的,您embeddings将与所有其他parameters网络一起进行培训。
(您也可以通过设置 ie 来冻结某些图层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)
Run Code Online (Sandbox Code Playgroud)
你可以看到你的嵌入权重也是Parameter这样的:
import torch
embedding_maxtrix = torch.nn.Embedding(10, 10)
print(type(embedding_maxtrix.weight))
Run Code Online (Sandbox Code Playgroud)
这将输出权重的类型,即Parameter:
<class 'torch.nn.parameter.Parameter'>
Run Code Online (Sandbox Code Playgroud)
我不完全确定retrieve是什么意思。你的意思是得到一个向量,还是你想要整个矩阵来保存它,或者做其他事情?
<class 'torch.nn.parameter.Parameter'>
Run Code Online (Sandbox Code Playgroud)
输出:
embedding_maxtrix = torch.nn.Embedding(5, 5)
# this will get you a single embedding vector
print('Getting a single vector:\n', embedding_maxtrix(torch.LongTensor([0])))
# of course you can do the same for a seqeunce
print('Getting vectors for a sequence:\n', embedding_maxtrix(torch.LongTensor([1, 2, 3])))
# this will give the the whole embedding matrix
print('Getting weights:\n', embedding_maxtrix.weight.data)
Run Code Online (Sandbox Code Playgroud)
我希望这能回答您的问题,您也可以查看文档,在那里您也可以找到一些有用的示例。
https://pytorch.org/docs/stable/nn.html#torch.nn.Embedding
| 归档时间: |
|
| 查看次数: |
6558 次 |
| 最近记录: |