Как расширить функцию потери Pytorch - PullRequest
0 голосов
/ 07 октября 2018

Я хотел бы создать свою собственную пользовательскую функцию потери в виде взвешенной комбинации из 3 функции потери, что-то похожее на:

criterion = torch.nn.CrossEntropyLoss(out1, lbl1) + \
            torch.nn.CrossEntropyLoss(out2, lbl2) + \
            torch.nn.CrossEntropyLoss(out3, lbl3)

Я делаю это для решения проблемы мультиклассовой классификации по нескольким меткам,Имеет ли это смысл?Как правильно реализовать такую ​​функцию потери в Pytorch?

Спасибо

1 Ответ

0 голосов
/ 08 октября 2018

Ваш подход к проблеме кажется правильным, но в вашем коде есть опечатка.Вот исправление для этого:

loss1 = torch.nn.CrossEntropyLoss()(out1, lbl1)
loss2 = torch.nn.CrossEntropyLoss()(out2, lbl2) 
loss3 = torch.nn.CrossEntropyLoss()(out3, lbl3)

final_loss = loss1 + loss2 + loss3

Затем вы можете вызвать .backward на final_loss, что должно затем вычислить градиенты и распространить их обратно.

Также возможно вес каждый из потерь компонентов, где веса сами по себе изучены в процессе обучения.

Вы можете сослаться на обсуждения объединить-несколько-критерии к потере-функции для получения дополнительной информации.

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