Heim > Backend-Entwicklung > Python-Tutorial > BCEWithLogitsLoss in PyTorch

BCEWithLogitsLoss in PyTorch

Linda Hamilton
Freigeben: 2024-11-07 06:01:03
Original
883 Leute haben es durchsucht

Kauf mir einen Kaffee☕

*Memos:

  • In meinem Beitrag werden L1-Verlust (MAE), L2-Verlust (MSE), Huber-Verlust, BCE und Kreuzentropieverlust erklärt.
  • Mein Beitrag erklärt BCELoss().
  • Mein Beitrag erklärt Sigmoid.
  • Mein Beitrag erklärt CrossEntropyLoss().

BCEWithLogitsLoss() kann den 0D- oder mehr D-Tensor der null oder mehr Werte (Float) abrufen, die von BCE Loss und Sigmoid aus dem 0D- oder mehr D-Tensor von null oder mehr Elementen berechnet werden, wie unten gezeigt:

*Memos:

  • Das erste Argument für die Initialisierung ist Gewicht (Optional-Default:None-Type:Tensor von int, float oder bool): *Memos:
    • Wenn es nicht angegeben ist, ist es 1.
    • Es muss der 0D- oder mehr D-Tensor von null oder mehr Elementen sein.
  • Es gibt ein Reduktionsargument für die Initialisierung (Optional-Default:'mean'-Type:str). *'none', 'mean' oder 'sum' können ausgewählt werden.
  • Es gibt ein pos_weight-Argument für die Initialisierung (Optional-Default:None-Type:tensor of int or float): *Memos:
    • Wenn es nicht angegeben ist, ist es 1.
    • Es muss der 0D- oder mehr D-Tensor von null oder mehr Elementen sein.
  • Es gibt die Argumente „size_average“ und „reduction“ für die Initialisierung, aber sie sind veraltet.
  • Das 1. Argument ist input(Required-Type:tensor of float). *Es muss der Tensor 0D oder mehr D von null oder mehr Elementen sein.
  • Das 2. Argument ist target(Required-Type:tensor of float). *Es muss der Tensor 0D oder mehr D von null oder mehr Elementen sein.
  • Eingabe und Ziel müssen die gleiche Größe haben, sonst liegt ein Fehler vor.
  • Der leere 1D- oder mehr D-Eingabe- und Zieltensor mit reduction='mean' gibt nan zurück.
  • Der leere 1D- oder mehr D-Eingabe- und Zieltensor mit reduction='sum' gibt 0 zurück. BCEWithLogitsLoss in PyTorch
import torch
from torch import nn

tensor1 = torch.tensor([ 8., -3., 0.,  1.,  5., -2.])
tensor2 = torch.tensor([-3.,  7., 4., -2., -9.,  6.])
       # -w*(p*y*log(1/(1+exp(-x))+(1-y)*log(1-(1/1+exp(-x))))
       # -1*(1*(-3)*log(1/(1+exp(-8)))+(1-(-3))*log(1-(1/(1+exp(-8)))))
       # ↓↓↓↓↓↓↓
       # 32.0003 + 21.0486 + 0.6931 + 3.3133 + 50.0067 + 50.0067 = 82.8423
       # 119.1890 / 6 = 19.8648
bcelogits = nn.BCEWithLogitsLoss()
bcelogits(input=tensor1, target=tensor2)
# tensor(19.8648)

bcelogits
# BCEWithLogitsLoss()

print(bcelogits.weight)
# None

bcelogits.reduction
# 'mean'

bcelogits = nn.BCEWithLogitsLoss(weight=None,
                                 reduction='mean',
                                 pos_weight=None)
bcelogits(input=tensor1, target=tensor2)
# tensor(19.8648)

bcelogits = nn.BCEWithLogitsLoss(reduction='sum')
bcelogits(input=tensor1, target=tensor2)
# tensor(119.1890)

bcelogits = nn.BCEWithLogitsLoss(reduction='none')
bcelogits(input=tensor1, target=tensor2)
# tensor([32.0003, 21.0486, 0.6931, 3.3133, 50.0067, 12.1269])

bcelogits = nn.BCEWithLogitsLoss(weight=torch.tensor([0., 1., 2., 3., 4., 5.]))
bcelogits(input=tensor1, target=tensor2)
# tensor(48.8394)

bcelogits = nn.BCEWithLogitsLoss(
                pos_weight=torch.tensor([0., 1., 2., 3., 4., 5.])
            )
bcelogits(input=tensor1, target=tensor2)
# tensor(28.5957)

bcelogits = nn.BCEWithLogitsLoss(weight=torch.tensor(0.))
bcelogits(input=tensor1, target=tensor2)
# tensor(0.)

bcelogits = nn.BCEWithLogitsLoss(pos_weight=torch.tensor(0.))
bcelogits(input=tensor1, target=tensor2)
# tensor(13.8338)

bcelogits = nn.BCEWithLogitsLoss(weight=torch.tensor([0, 1, 2, 3, 4, 5]))
bcelogits(input=tensor1, target=tensor2)
# tensor(48.8394)

bcelogits = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([0, 1, 2, 3, 4, 5]))
bcelogits(input=tensor1, target=tensor2)
# tensor(28.5957)

bcelogits = nn.BCEWithLogitsLoss(weight=torch.tensor(0))
bcelogits(input=tensor1, target=tensor2)
# tensor(0.)

bcelogits = nn.BCEWithLogitsLoss(pos_weight=torch.tensor(0))
bcelogits(input=tensor1, target=tensor2)
# tensor(13.8338)

bcelogits = nn.BCEWithLogitsLoss(
              weight=torch.tensor([True, False, True, False, True, False])
          )
bcelogits(input=tensor1, target=tensor2)
# tensor(13.7834)

bcelogits = nn.BCEWithLogitsLoss(weight=torch.tensor([False]))
bcelogits(input=tensor1, target=tensor2)
# tensor(0.)

tensor1 = torch.tensor([[8., -3., 0.], [1., 5., -2.]])
tensor2 = torch.tensor([[-3., 7., 4.], [-2., -9., 6.]])

bcelogits = nn.BCEWithLogitsLoss()
bcelogits(input=tensor1, target=tensor2)
# tensor(19.8648)

tensor1 = torch.tensor([[[8.], [-3.], [0.]], [[1.], [5.], [-2.]]])
tensor2 = torch.tensor([[[-3.], [7.], [4.]], [[-2.], [-9.], [6.]]])

bcelogits = nn.BCEWithLogitsLoss()
bcelogits(input=tensor1, target=tensor2)
# tensor(19.8648)

tensor1 = torch.tensor([])
tensor2 = torch.tensor([])

bcelogits = nn.BCEWithLogitsLoss(reduction='mean')
bcelogits(input=tensor1, target=tensor2)
# tensor(nan)

bcelogits = nn.BCEWithLogitsLoss(reduction='sum')
bcelogits(input=tensor1, target=tensor2)
# tensor(0.)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBCEWithLogitsLoss in PyTorch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage