Как реализовать дифференцированные потери Хэмминга в pytorch? - PullRequest
2 голосов
/ 09 марта 2020

Как реализовать дифференцируемую функцию потерь, которая подсчитывает количество неправильных прогнозов?

output = [1,0,4,10]
target = [1,2,4,15]
loss = np.count_nonzero(output != target) / len(output) # [0,1,0,1] -> 2 / 4 -> 0.5

enter image description here

Я пробовал несколько реализаций, но они не дифференцируемы. RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn

def hamming_loss(output, target):
  #loss = torch.tensor(torch.nonzero(output != target).size(0)).double() / target.size(0)
  #loss = torch.sum((output != target), dim=0).double() / target.size(0)
  loss = torch.mean((output != target).double())
  return loss

Может быть, есть какая-то похожая, но дифференциальная функция потерь?

1 Ответ

1 голос
/ 09 марта 2020

Почему бы вам не преобразовать свои дискретные прогнозы (например, [1, 0, 4, 10]) в "мягкие" прогнозы, то есть вероятность каждого ярлыка (например, output становится 4x (число меток) векторов вероятности).
Если у вас есть «мягкие» прогнозы, вы можете вычислить перекрестные энтропийные потери между прогнозируемыми выходными вероятностями и желаемыми целями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...