DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

HuberLoss in PyTorch

Buy Me a Coffee

*Memos:

HuberLoss() can get the 0D or more D tensor of the zero or more values(float) computed by Huber Loss from the 0D or more D tensor of zero or more elements as shown below:

*Memos:

  • The 1st argument for initialization is reduction(Optional-Default:'mean'-Type:str). *'none', 'mean' or 'sum' can be selected.
  • The 2nd argument for initialization is delta(Optional-Default:1.0-Type:float). *It must be 0<delta.
  • The 1st argument is input(Required-Type:tensor of float).
  • The 2nd argument is target(Required-Type:tensor of float).
  • input and target should be the same size otherwise there is a warning.
  • The empty 1D or more D input and target tensors with reduction='mean' return nan.
  • The empty 1D or more D input and target tensors with reduction='sum' return 0.. Image description
import torch from torch import nn tensor1 = torch.tensor([ 0.4, -0.8, -0.6, 0.3, 0.0, -0.5]) tensor2 = torch.tensor([-0.2, 0.9, 0.4, 0.1, 0.8, -0.5]) # 0.5*(x-y)^2 because |x-y| < delta  # 0.5*(0.4-(-0.2))^2 = 0.18  # ↓↓↓↓ ↓↓↓↓ ↓↓↓↓ ↓↓↓  # 0.18 + 1.2 + 0.5 + 0.02 + 0.32 + 0.0 = 2.22  # ↑↑↑ ↑↑↑  # delta(|x-y|-0.5*delta) because |x-y| >= delta  # 1.0*((|-0.8-0.9|)-0.5*1.0) = 1.2  #  # 2.22 / 6 = 0.37 huberloss = nn.HuberLoss() huberloss(input=tensor1, target=tensor2) # tensor(0.3700)  huberloss # HuberLoss()  huberloss.reduction # 'mean'  huberloss.delta # 1.0  huberloss = nn.HuberLoss(reduction='mean', delta=1.0) huberloss(input=tensor1, target=tensor2) # tensor(0.3700)  huberloss = nn.HuberLoss(reduction='sum', delta=1.0) huberloss(input=tensor1, target=tensor2) # tensor(2.2200)  huberloss = nn.HuberLoss(reduction='none', delta=1.0) huberloss(input=tensor1, target=tensor2) # tensor([0.1800, 1.2000, 0.5000, 0.0200, 0.3200, 0.0000])  huberloss = nn.HuberLoss(delta=0.5) huberloss(input=tensor1, target=tensor2) # tensor(0.2617)  huberloss = nn.HuberLoss(delta=1.5) huberloss(input=tensor1, target=tensor2) # tensor(0.4075)  huberloss = nn.HuberLoss(delta=2.0) huberloss(input=tensor1, target=tensor2) # tensor(0.4108)  huberloss = nn.HuberLoss(delta=3.0) huberloss(input=tensor1, target=tensor2) # tensor(0.4108)  tensor1 = torch.tensor([[0.4, -0.8, -0.6], [0.3, 0.0, -0.5]]) tensor2 = torch.tensor([[-0.2, 0.9, 0.4], [0.1, 0.8, -0.5]]) huberloss = nn.HuberLoss() huberloss(input=tensor1, target=tensor2) # tensor(0.3700)  tensor1 = torch.tensor([[[0.4], [-0.8], [-0.6]], [[0.3], [0.0], [-0.5]]]) tensor2 = torch.tensor([[[-0.2], [0.9], [0.4]], [[0.1], [0.8], [-0.5]]]) huberloss = nn.HuberLoss() huberloss(input=tensor1, target=tensor2) # tensor(0.3700)  tensor1 = torch.tensor([]) tensor2 = torch.tensor([]) huberloss = nn.HuberLoss(reduction='mean') huberloss(input=tensor1, target=tensor2) # tensor(nan)  huberloss = nn.HuberLoss(reduction='sum') huberloss(input=tensor1, target=tensor2) # tensor(0.) 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)