Ë
    éÓ^j³	  ã                   óh   — d Z ddlmZmZ ddlZddlmZ ddlmc mZ	  G d„ dej                  «      Zy)zY Binary Cross Entropy w/ a few extras

Hacked together by / Copyright 2021 Ross Wightman
é    )ÚOptionalÚUnionNc                   óÚ   ‡ — e Zd ZdZ	 	 	 	 	 	 ddee   deej                     dede	dee
ej                  ef      f
ˆ fd„Zdej                  d	ej                  d
ej                  fd„Zˆ xZS )ÚBinaryCrossEntropyz� BCE with optional one-hot from dense targets, label smoothing, thresholding
    NOTE for experiments comparing CE to BCE /w label smoothing, may remove
    Útarget_thresholdÚweightÚ	reductionÚsum_classesÚ
pos_weightc                 ó4  •— t         t        | �  «        d|cxk  rdk  sJ ‚ J ‚|�/t        |t        j
                  «      st	        j                  |«      }|| _        || _        |rdn|| _	        || _
        | j                  d|«       | j                  d|«       y )Ng        ç      ð?Únoner   r   )Úsuperr   Ú__init__Ú
isinstanceÚtorchÚTensorÚtensorÚ	smoothingr   r	   r
   Úregister_buffer)Úselfr   r   r   r	   r
   r   Ú	__class__s          €úi/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/loss/binary_cross_entropy.pyr   zBinaryCrossEntropy.__init__   s�   ø€ ô 	Ô  $Ñ0Ô2Ø�YÔ$ Ò$Ð$Ñ$Ð$Ð$ØÐ!Ü˜j¬%¯,©,Ô7Ü"Ÿ\™\¨*Ó5�
Ø"ˆŒØ 0ˆÔÙ#.™°IˆŒØ&ˆÔØ×Ñ˜X vÔ.Ø×Ñ˜\¨:Õ6ó    ÚxÚtargetÚreturnc                 óæ  — |j                   d   }||j                   d   k(  sJ ‚|j                   |j                   k7  r�|j                   d   }| j                  |z  }d| j                  z
  |z   }|j                  «       j                  dd«      }t	        j
                  ||f||j                  |j                  ¬«      j                  d||«      }| j                  �5|j                  | j                  «      j                  |j                  ¬«      }t        j                  ||| j                  | j                  | j                   ¬«      }| j"                  r|j%                  d«      j'                  «       }|S )Nr   éÿÿÿÿr   é   )ÚdeviceÚdtype)r"   )r   r	   )Úshaper   ÚlongÚviewr   Úfullr!   r"   Úscatter_r   ÚgtÚtoÚFÚ binary_cross_entropy_with_logitsr   r   r	   r
   ÚsumÚmean)r   r   r   Ú
batch_sizeÚnum_classesÚ	off_valueÚon_valueÚlosss           r   ÚforwardzBinaryCrossEntropy.forward%   s8  € Ø—W‘W˜Q‘Zˆ
Ø˜VŸ\™\¨!™_Ò,Ð,Ð,à�<‰<˜1Ÿ7™7Ò"àŸ'™' "™+ˆKàŸ™¨Ñ4ˆIØ˜DŸN™NÑ*¨YÑ6ˆHØ—[‘[“]×'Ñ'¨¨AÓ.ˆFÜ—Z‘ZØ˜[Ð)ØØ—x‘x q§w¡wô0÷ 19±¸¸FÀHÓ0Mð ð
 × Ñ Ð,à—Y‘Y˜t×4Ñ4Ó5×8Ñ8¸v¿|¹|Ð8ÓLˆFä×1Ñ1ØˆvØ�K‰KØ—‘Ø—n‘nô	
ˆð ×ÒØ—8‘8˜B“<×$Ñ$Ó&ˆDØˆr   )gš™™™™™¹?NNr-   FN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úfloatr   r   ÚstrÚboolr   r   r3   Ú__classcell__)r   s   @r   r   r      s™   ø„ ñð
 Ø04Ø-1Ø#Ø %Ø?Cñ7ð ' u™oð7ð ˜UŸ\™\Ñ*ð	7ð
 ð7ð ð7ð !  u§|¡|°UÐ':Ñ!;Ñ<õ7ð*˜Ÿ™ð ¨u¯|©|ð ÀÇÁ÷ r   r   )r7   Útypingr   r   r   Útorch.nnÚnnÚtorch.nn.functionalÚ
functionalr*   ÚModuler   © r   r   ú<module>rC      s+   ðñ÷ #ã Ý ß Ð ô5˜Ÿ™õ 5r   