猿问

Making custom non-trivial loss function in pytorch

我刚开始使用 pytorch 并试图了解如何处理自定义损失函数,尤其是一些非平凡的。


问题 1。我想刺激我的 nn 最大化真实阳性率,同时最小化错误发现率。例如,真阳性的总分增加 +2,假阳性的总分减少 -5。


def tp_fp_loss(yhat, y):

    total_score = 0

    for i in range(y.size()):

        if is_tp(yhat[i],y[i]):

            total_score += 2

        if is_fp(yhat[i],y[i]):

            total_score -= 5

    return -total_score

问题2。如果 y 是正负奖励列表(y = [10,-5, -40, 23, 11, -7]),则刺激 nn 以最大化奖励总和。


def max_reward_loss(yhat,y):

    r = torch.autograd.Variable(torch.Tensor(y[yhat >= .5]), requires_grad=True).sum()                    

    return -r

也许我不完全理解一些 autograd 机制,我正确实现的函数计算损失但与它们一起学习不起作用:(我做错了什么?有人能帮我解决任何这些问题吗?


慕标5832272
浏览 190回答 2
2回答

慕尼黑8549860

您的损失函数不可微 - 您无法计算其梯度(继续尝试)。你应该看起来像infogain loss
随时随地看视频慕课网APP

相关分类

Python
我要回答