pytorch - torch.sum 里面有一个条件
问题描述
我正在尝试创建一个推荐系统,我尝试使用一个函数来计算我的 hit@10,如下所示:
def RecEvaluate(model, g, features, users_eval, movies_eval, neg_sample_size):
model.eval()
with torch.no_grad():
neg_movies_eval = data.neg_valid[users_eval].flatten()
r, neg_r = model.est_rating(g, features, users_eval, movies_eval, neg_movies_eval)
hits10 = (torch.sum(neg_r > r, 1) <= 10).numpy()
print('HITS@10:{:.4f}'.format(np.mean(hits10)))
return np.mean(hits10)
我特别想了解这条线
hits10 = (torch.sum(neg_r > r, 1) <= 10).numpy()
为了理解起见,我尝试并执行了这段代码作为示例:
neg_r = torch.tensor([[1., 10. ,5., 1., 2., 4.],[0., 7., 8., 10., 6., 2.]])
r = torch.tensor([[1., 9. ,5., 1., 2., 3.]])
#####################################################################
r = r.T
r.shape
neg_r = neg_r.T
neg_r.shape
print(neg_r > r)
print(torch.sum(neg_r > r))
print(torch.sum(neg_r > r, 1))
print(torch.sum(neg_r > r, 1) <= 10)
hits10 = (torch.sum(neg_r > r, 1) <= 10).numpy()
print(hits10)
print('HITS@10:{:.4f}'.format(np.mean(hits10)))
我得到了以下结果:
torch.Size([6, 1])
torch.Size([6, 2])
tensor([[False, False],
[ True, False],
[False, True],
[False, True],
[False, True],
[ True, False]])
tensor(5)
tensor([0, 1, 1, 1, 1, 1])
tensor([True, True, True, True, True, True])
[ True True True True True True]
HITS@10:1.0000
它是如何工作的?这就是我们计算 Hit@10 的方式吗?最后是否正确?在这种情况下,我们如何计算 ARHRs @ 10?
解决方案
推荐阅读
- javascript - Javascript factorial function memoization
- tkinter - Python tkinter 如何实时显示图像?
- r - 两个限制之间的不同 Y 比例
- tsql - T-SQL 更新查询以三个一组的形式输入重复数据
- c - 缓冲区刷新不适用于 printf 功能
- javascript - 如何在函数式 JavaScript 中存储数组的状态?
- python - 如何在 Python 3 中有效地定义自定义全局比较器?
- php - 如何从数据库中的表中隔离单个结果?
- azure - Azure CosmoDB 部署失败并显示“资源操作已完成,终端预配状态为‘失败’。”
- html - 侧栏列上的 Bootstrap 置顶不起作用