
    Ng                     f    d dl Z d dlmZ  G d dej                  Z G d dej                  ZdS )    Nc                   &     e Zd Zd fd	Zd Z xZS )	AsymmetricLossMultiLabel      皙?:0yE>Fc                     t          t          |                                            || _        || _        || _        || _        || _        d S N)superr   __init__	gamma_neg	gamma_posclipdisable_torch_grad_focal_losseps)selfr   r   r   r   r   	__class__s         U/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/loss/asymmetric_loss.pyr   z!AsymmetricLossMultiLabel.__init__   sH    &--66888""	-J*    c                    t          j        |          }|}d|z
  }| j        )| j        dk    r|| j        z                       d          }|t          j        |                    | j                            z  }d|z
  t          j        |                    | j                            z  }||z   }| j        dk    s| j        dk    r}| j        rt          j	        d           ||z  }	|d|z
  z  }
|	|
z   }| j        |z  | j        d|z
  z  z   }t          j
        d|z
  |          }| j        rt          j	        d           ||z  }|                                 S )zz"
        Parameters
        ----------
        x: input logits
        y: targets (multi-label binarized vector)
        r   Nr   )max)minFT)torchsigmoidr   clamplogr   r   r   r   set_grad_enabledpowsum)r   xy	x_sigmoidxs_posxs_neglos_poslos_neglosspt0pt1ptone_sided_gammaone_sided_ws                 r   forwardz AsymmetricLossMultiLabel.forward   sh    M!$$	Y 9 TY]]ty(//A/66F ei : :;;;q5EIflltxl&@&@AAA  >A!!3!31 .&u---1*CAE"CsB"nq04>QU3KKO)AFO<<K1 -&t,,,KD

{r   )r   r   r   r   F)__name__
__module____qualname__r   r-   __classcell__r   s   @r   r   r      sL             # # # # # # #r   r   c                   .     e Zd Zd	def fdZd
dZ xZS )AsymmetricLossSingleLabelr   r   皙?meanr   c                     t          t          |                                            || _        t	          j        d          | _        g | _        || _        || _	        || _
        d S )Ndim)r   r4   r   r   nn
LogSoftmax
logsoftmaxtargets_classesr   r   	reduction)r   r   r   r   r?   r   s        r   r   z"AsymmetricLossSingleLabel.__init__6   s\    '..77999-B///!"""r   Nc                    |                                 d         }|                     |          }t          j        |                              d|                                                    d          d          | _        | j        }d|z
  }t          j        |          }d|z
  }	||z  }|	|z  }	t          j	        d|z
  |	z
  | j
        |z  | j        |z  z             }
||
z  }| j        dk    rB| j                            d| j        z
                                | j        |z            | _        | j                            |           }|                    d          }| j        dk    r|                                }|S )zj"
        Parameters
        ----------
        x: input logits
        y: targets (1-hot vector)
        r8   r   r   r9   r6   )sizer=   r   
zeros_likescatter_long	unsqueezer>   expr   r   r   r   muladdr   r?   r6   )r   inputstargetr?   num_classes	log_predstargetsanti_targetsr#   r$   asymmetric_wr'   s               r   r-   z!AsymmetricLossSingleLabel.forward@   sn    kkmmB'OOF++	$/77@@FKKMMD[D[\]D^D^`abb &7{9%%V'!,&yVf!4!%'!9DN\<Y!Y[ [,	8a<<#'#7#;#;AL#I#I#M#MdhYdNd#e#eD  %)))444xxBx>V##99;;Dr   )r   r   r5   r6   r
   )r.   r/   r0   floatr   r-   r1   r2   s   @r   r4   r4   5   s]        # #e # # # # # #! ! ! ! ! ! ! !r   r4   )r   torch.nnr;   Moduler   r4    r   r   <module>rT      s          - - - - -ry - - -`, , , , ,	 , , , , ,r   