我刚开始使用 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
