> 백엔드 개발 > 파이썬 튜토리얼 > PyTorch의 BCEWithLogits손실

PyTorch의 BCEWithLogits손실

Linda Hamilton
풀어 주다: 2024-11-07 06:01:03
원래의
883명이 탐색했습니다.

커피 한잔 사주세요😄

*메모:

  • 내 게시물에서는 L1 손실(MAE), L2 손실(MSE), Huber 손실, BCE 및 교차 엔트로피 손실에 대해 설명합니다.
  • 내 게시물에서는 BCELoss()에 대해 설명합니다.
  • 내 게시물은 Sigmoid를 설명합니다.
  • 내 게시물에서는 CrossEntropyLoss()에 대해 설명합니다.

BCEWithLogitsLoss()는 아래와 같이 0개 이상의 요소로 구성된 0D 이상의 D 텐서에서 BCE Loss 및 Sigmoid로 계산된 0개 이상의 값(float)으로 구성된 0D 이상의 D 텐서를 가져올 수 있습니다.

*메모:

  • 초기화를 위한 첫 번째 인수는 가중치입니다(Optional-Default:None-Type:int, float 또는 bool의 텐서). *메모:
    • 주어지지 않으면 1입니다.
    • 0개 이상의 요소로 구성된 0D 이상의 D 텐서여야 합니다.
  • 초기화를 위한 축소 인수(Optional-Default:'mean'-Type:str)가 있습니다. *'없음', '평균', '합'을 선택할 수 있습니다.
  • 초기화를 위한 pos_weight 인수가 있습니다(Optional-Default:None-Type:int 또는 float의 텐서). *메모:
    • 주어지지 않으면 1입니다.
    • 0개 이상의 요소로 구성된 0D 이상의 D 텐서여야 합니다.
  • 초기화에 size_average 및 Reduce 인수가 있지만 더 이상 사용되지 않습니다.
  • 첫 번째 인수는 입력(필수 유형:float의 텐서)입니다. *0개 이상의 요소로 구성된 0D 이상의 D 텐서여야 합니다.
  • 두 번째 인수는 target(필수 유형:float의 텐서)입니다. *0개 이상의 요소로 구성된 0D 이상의 D 텐서여야 합니다.
  • 입력과 대상의 크기가 동일해야 합니다. 그렇지 않으면 오류가 발생합니다.
  • 빈 1차원 이상의 D 입력 및 감소='평균'인 대상 텐서는 nan을 반환합니다.
  • reduction='sum'인 빈 1D 이상의 D 입력 및 대상 텐서는 0을 반환합니다.. 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.)
로그인 후 복사

위 내용은 PyTorch의 BCEWithLogits손실의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿