
    Ngy                     |    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	dS )z_ Cross Entropy w/ smoothing or soft targets

Hacked together by / Copyright 2021 Ross Wightman
    Nc                   V     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                     t          t          |                                            |dk     sJ || _        d|z
  | _        d S )Ng      ?)superr   __init__	smoothing
confidence)selfr	   	__class__s     S/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/loss/cross_entropy.pyr   z#LabelSmoothingCrossEntropy.__init__   sC    ($//88:::3"y.    xtargetreturnc                 .   t          j        |d          }|                    d|                    d                     }|                    d          }|                    d           }| j        |z  | j        |z  z   }|                                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&2B2B12E2EOFFF##A&&}}},,,)DN[,HHyy{{r   )r   )	__name__
__module____qualname____doc__r   torchTensorr"   __classcell__r   s   @r   r   r      sv         ) ) ) ) ) ) u|         r   r   c                   P     e Zd Z fdZdej        dej        dej        fdZ xZS )SoftTargetCrossEntropyc                 V    t          t          |                                            d S )N)r   r,   r   )r   r   s    r   r   zSoftTargetCrossEntropy.__init__   s&    $d++4466666r   r   r   r   c                     t          j        | t          j        |d          z  d          }|                                S )Nr   r   )r'   sumr   r   r   )r   r   r   r!   s       r   r"   zSoftTargetCrossEntropy.forward"   s:    y&1=#;#;#;;DDDyy{{r   )r#   r$   r%   r   r'   r(   r"   r)   r*   s   @r   r,   r,      sg        7 7 7 7 7 u|         r   r,   )
r&   r'   torch.nnnntorch.nn.functional
functionalr   Moduler   r,    r   r   <module>r6      s    
                       $    RY     r   