Я только начал с 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 . В случае, когда у - список положительных и отрицательных вознаграждений (у = [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
Может быть, я не совсем понимаю некоторую механику автограда, функции, которые я реализовал, правильно рассчитывают потери, но
обучение с ними не работает :( Что я делаю не так? Кто-нибудь может мне помочь с некоторым рабочим решением любой из этих проблем?