Как подчеркнуть выбранный вывод в нейронной сети

#neural-network #pytorch

#нейронная сеть #pytorch

Вопрос:

Я обучаю набор данных с 17 функциями и 5 выводами с помощью pytorch. Но меня больше всего интересуют два из них, скажем, вывод 2 и 3 из 0-4. Какова хорошая стратегия для получения максимально высокой точности на 2 и 3, в то время как остальные могут иметь более низкую точность?

Комментарии:

1. Что это за выходной уровень? nn.Linear ?

2. Пожалуйста, предоставьте больше информации о вашей сети и о том, что представляет каждый вывод. Представляют ли выходные данные 0-4 вероятность классификации, и каждый вывод является одним классом? Тогда вы ищете взвешенное значение потерь

3. @Ivan да, nn.Linear и в настоящее время использует функцию активации softmax

4. Это проблема категоризации, поэтому каждая из них представляет категорию, поэтому вывод равен одному 1, а остальные равны 0. Я рассмотрю функцию взвешенных потерь, спасибо! @Proko

Ответ №1:

Если вы используете nn.CrossEntropyLoss() , вы можете передать веса, чтобы подчеркнуть или снять акцент с определенных классов. Из документов PyTorch:

torch.nn.CrossEntropyLoss(weight: Optional[torch.Tensor] = None, ...)

Веса не обязательно суммировать до единицы, поскольку PyTorch обработает это самостоятельно, когда reduction='mean' , что является настройкой по умолчанию. Веса указывают, какие классы должны иметь больший вес при расчете потерь. Другими словами, чем выше вес, тем выше штраф за неправильное предсказание для конкретного набора классов с более высокими весами.

 # imports assumed

x = torch.randn(10, 5) # dummy data
target = torch.randint(0, 5, (10,)) # dummy targets

weights = torch.tensor([1., 1., 2., 2., 1.]) # emphasize classes 2 and 3
criterion_weighted = nn.CrossEntropyLoss(weight=weights)
loss_weighted = criterion_weighted(x, target)
 

Комментарии:

1. Я использую перекрестную потерю энтропии, обязательно попробую это. Большое спасибо!!