
    RЦi;                     `    S SK r S SKJr  S SKJs  Jr  SSKJr   " S S\R                  5      r	g)    N   )LabelSmoothingCrossEntropyc                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )JsdCrossEntropy   a7  Jensen-Shannon Divergence + Cross-Entropy Loss

Based on impl here: https://github.com/google-research/augmix/blob/master/imagenet.py
From paper: 'AugMix: A Simple Data Processing Method to Improve Robustness and Uncertainty -
https://arxiv.org/abs/1912.02781

Hacked together by / Copyright 2020 Ross Wightman
c                    > [         TU ]  5         Xl        X l        Ub  US:  a  [	        U5      U l        g [        R                  R                  5       U l        g )Nr   )	super__init__
num_splitsalphar   cross_entropy_losstorchnnCrossEntropyLoss)selfr   r   	smoothing	__class__s       L/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/loss/jsd.pyr
   JsdCrossEntropy.__init__   sF    $
 Y]&@&KD#&+hh&?&?&AD#    c                 \   UR                   S   U R                  -  nX0R                  -  UR                   S   :X  d   e[        R                  " X5      nU R	                  US   US U 5      nU Vs/ s H  n[
        R                  " USS9PM     nn[        R                  " [        R                  " U5      R                  SS9SS5      R                  5       nXPR                  [        U V	s/ s H  n	[
        R                  " XSS9PM     sn	5      -  [        U5      -  -  nU$ s  snf s  sn	f )Nr   r   )dim)axisgHz>	batchmean)	reduction)shaper   r   splitr   Fsoftmaxclampstackmeanlogr   sumkl_divlen)
r   outputtarget
split_sizelogits_splitlosslogitsprobslogp_mixturep_splits
             r   __call__JsdCrossEntropy.__call__   s   \\!_7
OO+v||A>>>{{66 &&|A{
8KL8DEf6q)E {{5;;u#5#:#:#:#BD!LPPR

SIN"PINg #$(([#:IN"P Q QSVW\S]^ 	^ F"Ps   0D$,D))r   r   r   )      g?)	__name__
__module____qualname____firstlineno____doc__r
   r0   __static_attributes____classcell__)r   s   @r   r   r      s    B r   r   )
r   torch.nnr   torch.nn.functional
functionalr   cross_entropyr   Moduler    r   r   <module>rA      s$        5bii r   