Fonction torch.nn.BCEWithLogitsLoss de PyTorch

PyTorch torch.nn 参考手册Manuel de référence torch.nn de PyTorch


torch.nn.BCEWithLogitsLossIl s'agit de la fonction de perte d'entropie croisée binaire (avec Sigmoid) dans PyTorch.

Elle combine Sigmoid et BCE, ce qui la rend numériquement plus stable, utilisée pour les tâches de classification binaire.

Définition de fonction

torch.nn.BCEWithLogitsLoss(weight=None, reduction='mean', pos_weight=None)

Paramètres :

  • weight: poids manuels
  • pos_weight: poids de la classe positive, utilisé pour le déséquilibre de classes

Exemples d'utilisation

Exemple 1 : Utilisation de base

Exemple

import torch
import torch.nn as nn

criterion = nn.BCEWithLogitsLoss()

# logits non normalisés
logits = torch.tensor([2.0, -1.0, 0.5, -3.0])
# Étiquettes binaires
targets = torch.tensor([1.0, 0.0, 1.0, 0.0])

loss = criterion(logits, targets)
print("Perte BCE :", loss.item())

# Vérification manuelle : Sigmoïde + BCE
sigmoid = torch.sigmoid(logits)
bce = nn.BCELoss()(sigmoid, targets)
print("BCE manuelle :", bce.item())

Exemple 2 : Déséquilibre des classes

Exemple

import torch
import torch.nn as nn

# Poids de la classe positive : augmenter l'importance des échantillons positifs
pos_weight = torch.tensor([5.0])
criterion = nn.BCEWithLogitsLoss(pos_weight=pos_weight)

logits = torch.randn(10, 1)
targets = torch.zeros(10, 1)
targets[:2] = 1.0  # La classe positive est rare

loss = criterion(logits, targets)
print("Perte BCE pondérée :", loss.item())

Exemple 3 : Classification multi-étiquettes

Exemple

import torch
import torch.nn as nn

# Classification binaire multi-étiquettes
criterion = nn.BCEWithLogitsLoss()

# batch=4, 5 classes, chacune peut être 0 ou 1
logits = torch.randn(4, 5)
labels = torch.randint(0, 2, (4, 5)).float()

loss = criterion(logits, labels)
print("Perte multi-étiquettes :", loss.item())

Cas d'utilisation

  • Classification binaire: étiquette unique
  • Classification multi-étiquettes: chaque étiquette est indépendante
  • Déséquilibre des classes: Utiliser pos_weight

Remarque : l'entrée correspond à des logits, pas besoin d'appliquer Sigmoid au préalable.


PyTorch torch.nn 参考手册Manuel de référence torch.nn de PyTorch

Autres extensions