Ë
    éÓ^jy  ã                   ó‚   — 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     €úb/var/www/ramen.bs-engineer-server.com/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}   € Ü—=‘= ¨Ô+ˆØ—O‘O¨°&×2BÑ2BÀ1Ó2E�OÓFÐFˆØ×#Ñ# AÓ&ˆØ—}‘}¨�}Ó,Ð,ˆØ�‰ Ñ)¨D¯N©N¸[Ñ,HÑHˆØ�y‰y‹{Ð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   € Ü�y‰y˜&˜¤1§=¡=°¸Ô#;Ñ;ÀÔDˆØ�y‰y‹{Ð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   ðñó
 Ý ß Ð ô §¡ô ô$˜RŸY™Yõ r   