Skip to main content
 首页 » 编程设计

python之在 pytorch 中制作自定义非平凡损失函数

2025年05月04日16JustinYoung

我刚开始使用 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 机制,我正确实现的函数计算损失但是 和他们一起学习是行不通的:(我做错了什么?有人能帮我解决这些问题吗?

请您参考如下方法:

您的损失函数不可微分 - 您无法计算其梯度(继续尝试)。
你应该看起来像 infogain loss