
    khy                         d Z ddlZddlmZ ddlmc mZ  G d dej                        Z G d dej                        Z	y)z_ Cross Entropy w/ smoothing or soft targets

Hacked together by / Copyright 2021 Ross Wightman
    Nc                   t     e Zd ZdZd fd	Zdej                  dej                  dej                  fdZ xZS )LabelSmoothingCrossEntropyz$ NLL loss with label smoothing.
    c                 Z    t         t        |           |dk  sJ || _        d|z
  | _        y )Ng      ?)superr   __init__	smoothing
confidence)selfr   	__class__s     S/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/loss/cross_entropy.pyr   z#LabelSmoothingCrossEntropy.__init__   s/    ($8:3"y.    xtargetreturnc                    t        j                  |d      }|j                  d|j                  d             }|j	                  d      }|j                  d       }| j                  |z  | j                  |z  z   }|j                         S )Ndim   )r   index)Flog_softmaxgather	unsqueezesqueezemeanr	   r   )r
   r   r   logprobsnll_losssmooth_losslosss          r   forwardz"LabelSmoothingCrossEntropy.forward   s}    ==+OO&2B2B12EOFF##A&}}},,)DNN[,HHyy{r   )g?)	__name__
__module____qualname____doc__r   torchTensorr!   __classcell__r   s   @r   r   r      s3    ) u||  r   r   c                   n     e Zd Z fdZdej
                  dej
                  dej
                  fdZ xZS )SoftTargetCrossEntropyc                 *    t         t        |           y )N)r   r+   r   )r
   r   s    r   r   zSoftTargetCrossEntropy.__init__   s    $d46r   r   r   r   c                     t        j                  | t        j                  |d      z  d      }|j	                         S )Nr   r   )r&   sumr   r   r   )r
   r   r   r    s       r   r!   zSoftTargetCrossEntropy.forward"   s0    yy&1==#;;Dyy{r   )r"   r#   r$   r   r&   r'   r!   r(   r)   s   @r   r+   r+      s.    7 u||  r   r+   )
r%   r&   torch.nnnntorch.nn.functional
functionalr   Moduler   r+    r   r   <module>r5      s8   
     $RYY r   