Closed ShelveyJ closed 1 year ago
描述这个 bug 在运行图嵌入模型LINE时,发现损失的计算过程如下:
class NegSamplingLoss(nn.Module): def __init__(self): super(NegSamplingLoss, self).__init__() def forward(self, score, sign): return -torch.mean(torch.sigmoid(sign * score))
在计算均值之前没有对结果进行取对数。
预期 使用原损失计算过程得到的结果为:
23 Oct 15:52 INFO best valid : OrderedDict([('recall@10', 0.0979), ('mrr@10', 0.2787), ('ndcg@10', 0.1384), ('hit@10', 0.5292), ('precision@10', 0.1083)]) 23 Oct 15:52 INFO test result: OrderedDict([('recall@10', 0.1146), ('mrr@10', 0.3305), ('ndcg@10', 0.1706), ('hit@10', 0.5589), ('precision@10', 0.1281)])
将torch.sigmoid更换为F.logsigmoid之后结果为:
23 Oct 15:46 INFO best valid : OrderedDict([('recall@10', 0.1922), ('mrr@10', 0.3606), ('ndcg@10', 0.2108), ('hit@10', 0.7211), ('precision@10', 0.1491)]) 23 Oct 15:46 INFO test result: OrderedDict([('recall@10', 0.2139), ('mrr@10', 0.4284), ('ndcg@10', 0.2552), ('hit@10', 0.7296), ('precision@10', 0.1752)])
@ShelveyJ 您好! 感谢您的提醒,我们参考原论文后,在 loss 计算中加上了 log,详见#1507
描述这个 bug 在运行图嵌入模型LINE时,发现损失的计算过程如下:
在计算均值之前没有对结果进行取对数。
预期 使用原损失计算过程得到的结果为:
将torch.sigmoid更换为F.logsigmoid之后结果为: