#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. Я использую перекрестную потерю энтропии, обязательно попробую это. Большое спасибо!!