*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 be0<delta
. - The 1st argument is
input
(Required-Type:tensor
offloat
). - The 2nd argument is
target
(Required-Type:tensor
offloat
). -
input
andtarget
should be the same size otherwise there is a warning. - The empty 1D or more D
input
andtarget
tensors withreduction='mean'
returnnan
. - The empty 1D or more D
input
andtarget
tensors withreduction='sum'
return0.
.
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.)
Top comments (0)