我是PyTorch的新手,正在尝试实现推荐系统。 我正在研究我的第一个模型(矩阵分解),我在这里发现: https://blog.fastforwardlabs.com/2018/04/10/pytorch-for-recommenders-101.html
我有一个用户ID和项目ID的列表(参考电影ID)以及我传递给 模型如网站所述。我用pandas函数读取文件
training.py:
ratings = pd.read_csv('../data/ratings.csv')
movies = pd.read_csv('../data/movies.csv')
n_users = int(ratings.userId.nunique())
n_items = int(ratings.movieId.nunique())
users = pd.Series.tolist(ratings.userId)
items = pd.Series.tolist(ratings.movieId)
rating_values = pd.Series.tolist(ratings.rating)
model = MatrixFactorization(n_users, n_items, n_factors=20)
loss_fn = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(),
lr=1e-6)
index = 0
for user, item in zip(users, items):
# get user, item and rating data
rating = Variable(torch.FloatTensor([rating_values[index]]))
user = Variable(torch.LongTensor([int(user)]))
item = Variable(torch.LongTensor([int(item)]))
index += 1
# predict rating
prediction = model(user, item)
loss = loss_fn(prediction, rating)
print(loss)
optimizer.zero_grad()
# backpropagate
loss.backward()
# update weights
optimizer.step()
models.py:
class MatrixFactorization(nn.Module):
def __init__(self, n_users, n_items, n_factors=20):
super().__init__()
# create user embeddings
self.user_factors = nn.Embedding(n_users, n_factors,
sparse=True)
# create item embeddings
self.item_factors = nn.Embedding(n_items, n_factors,
sparse=True)
def forward(self, user, item):
# matrix multiplication
return (self.user_factors(user) * self.item_factors(item)).sum(1)
def predict(self, user, item):
return self.forward(user, item)
最后,我得到以下错误:
Traceback (most recent call last):
File "src\training.py", line 31, in <module>
prediction = model(user, item)
File "AppData\Local\Programs\Python\Python39\lib\site-packages\torch\nn\modules\module.py", line 727, in _call_impl
result = self.forward(*input, **kwargs)
File "src\models.py", line 20, in forward
return (self.user_factors(user) * self.item_factors(item)).sum(1)
File "Python\Python39\lib\site-packages\torch\nn\modules\module.py", line 727, in _call_impl
result = self.forward(*input, **kwargs)
File "Python\Python39\lib\site-packages\torch\nn\modules\sparse.py", line 124, in forward
return F.embedding(
File "Python\Python39\lib\site-packages\torch\nn\functional.py", line 1852, in embedding
return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
IndexError: index out of range in self
我不明白出了什么问题。模型或我的输入有问题吗
目前没有回答
相关问题 更多 >
编程相关推荐