
    QЦi2                     $   S SK r S SKJr  S SKJr  S SKJrJrJrJ	r	J
r
  S SKrS SKJr  S SKJs  Jr  S SKJr  SSKJr  SSKJr  S	S
KJrJrJr  S	SKJr  S	SKJrJr  / SQr\" S/ SQ5      r \\	\   \	\   S.\ l!        \ r" " S S\RF                  5      r$ " S S\RF                  5      r% " S S\RF                  5      r& " S S\RF                  5      r' " S S\5      r(\" 5       \" S\(RR                  4S9SSS.S\	\(   S\*S \S!\$4S" jj5       5       r+g)#    N)
namedtuple)partial)AnyCallableListOptionalTuple)Tensor   )ImageClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_IMAGENET_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)	GoogLeNetGoogLeNetOutputs_GoogLeNetOutputsGoogLeNet_Weights	googlenetr   )logitsaux_logits2aux_logits1c                   6  ^  \ rS rSrSS/r       SS\S\S\S\\   S\\\	S\
R                  4         S	\S
\SS4U 4S jjjrS\S\4S jrS\S\\\\   \\   4   4S jr\R&                  R(                  S\S\S\\   S\4S j5       rS\S\4S jrSrU =r$ )r      
aux_logitstransform_inputNnum_classesinit_weightsblocks.dropoutdropout_auxreturnc           	        > [         TU ]  5         [        U 5        Uc  [        [        [
        /nUc  [        R                  " S[        5        Sn[        U5      S:w  a  [        S[        U5       35      eUS   nUS   n	US   n
X l        X0l        U" SSS	SSS
9U l        [        R                  " SSSS9U l        U" SSSS9U l        U" SSSSS9U l        [        R                  " SSSS9U l        U	" SSSSSSS5      U l        U	" SSSSSSS5      U l        [        R                  " SSSS9U l        U	" SSSSSSS5      U l        U	" SSSSSSS5      U l        U	" SSSSSSS5      U l        U	" SSSSSSS5      U l        U	" SSSSSSS5      U l        [        R                  " SSSS9U l        U	" S SSSSSS5      U l        U	" S S!SS!SSS5      U l        U(       a  U
" SXS"9U l        U
" SXS"9U l         OS U l        S U l         [        RB                  " S#5      U l"        [        RF                  " US$9U l$        [        RJ                  " S%U5      U l&        U(       Ga  U RO                  5        H  n[Q        U[        RR                  5      (       d  [Q        U[        RJ                  5      (       a7  [T        R                  RV                  RY                  URZ                  S&S'S(SS)9  Mx  [Q        U[        R\                  5      (       d  M  [        RV                  R_                  URZ                  S5        [        RV                  R_                  UR`                  S5        M     g g )*NzThe default weight initialization of GoogleNet will be changed in future releases of torchvision. If you wish to keep the old behavior (which leads to long initialization times due to scipy/scipy#11299), please set init_weights=True.T   z%blocks length should be 3 instead of r   r   r   @      )kernel_sizestridepadding)r,   	ceil_moder+      r+   r-   `                i     0   i      p            i   i  i@  i@  i  )r$   )r   r   p   g        g{Gz?)meanstdab)1super__init__r   BasicConv2d	InceptionInceptionAuxwarningswarnFutureWarninglen
ValueErrorr   r    conv1nn	MaxPool2dmaxpool1conv2conv3maxpool2inception3ainception3bmaxpool3inception4ainception4binception4cinception4dinception4emaxpool4inception5ainception5baux1aux2AdaptiveAvgPool2davgpoolDropoutr$   Linearfcmodules
isinstanceConv2dtorchinittrunc_normal_weightBatchNorm2d	constant_bias)selfr!   r   r    r"   r#   r$   r%   
conv_blockinception_blockinception_aux_blockm	__class__s               [/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torchvision/models/googlenet.pyrG   GoogLeNet.__init__    s     	D!>!9l;FMML 	  Lv;!DS[MRSSAY
 )$Qi$.21QJ
QqDABA6
CQB
QqDA*3BRRH*3S#r2rJQqDA*3Rb"bI*3S#r2rJ*3S#r2rJ*3S#r2rJ*3S#r3LQqDA*3S#r3L*3S#r3L+CRDI+CRDIDIDI++F3zzG,))D+.\\^a++z!RYY/G/GHHMM//sPRVW/X2>>22GG%%ahh2GG%%affa0 $     xc                 2   U R                   (       a  [        R                  " US S 2S4   S5      S-  S-   n[        R                  " US S 2S4   S5      S-  S-   n[        R                  " US S 2S4   S5      S-  S	-   n[        R                  " X#U4S5      nU$ )
Nr   r   gZd;O?gQgy&1?gI+r   g?gMbȿ)r    rl   	unsqueezecat)rs   r|   x_ch0x_ch1x_ch2s        ry   _transform_inputGoogLeNet._transform_inputf   s    OOAadGQ/;?BUUEOOAadGQ/;?BUUEOOAadGQ/;?BUUE		5/3Ar{   c                    U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nS nU R                  b"  U R                  (       a  U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nS nU R                  b"  U R                  (       a  U R                  U5      nU R                  U5      nU R!                  U5      nU R#                  U5      nU R%                  U5      nU R'                  U5      n[(        R*                  " US5      nU R-                  U5      nU R/                  U5      nXU4$ Nr   )rP   rS   rT   rU   rV   rW   rX   rY   rZ   rb   trainingr[   r\   r]   rc   r^   r_   r`   ra   re   rl   flattenr$   rh   )rs   r|   rb   rc   s       ry   _forwardGoogLeNet._forwardn   s|   JJqMMM!JJqMJJqMMM! QQMM!Q!%99 }}yy|QQQ!%99 }}yy|QMM!QQ LLOMM!QLLOGGAJ}r{   rc   rb   c                 b    U R                   (       a  U R                  (       a  [        XU5      $ U$ N)r   r   r   )rs   r|   rc   rb   s       ry   eager_outputsGoogLeNet.eager_outputs   s!    ==T__$Qd33Hr{   c                 F   U R                  U5      nU R                  U5      u  pnU R                  =(       a    U R                  n[        R
                  R                  5       (       a)  U(       d  [        R                  " S5        [        XU5      $ U R                  XU5      $ )Nz8Scripted GoogleNet always returns GoogleNetOutputs Tuple)r   r   r   r   rl   jitis_scriptingrK   rL   r   r   )rs   r|   rc   rb   aux_defineds        ry   forwardGoogLeNet.forward   sy    !!!$a(mm799!!##XY#AT22%%at44r{   )rb   rc   r   re   rP   rT   rU   r$   rh   rW   rX   rZ   r[   r\   r]   r^   r`   ra   rS   rV   rY   r_   r    )i  TFNNg?ffffff?)__name__
__module____qualname____firstlineno____constants__intboolr   r   r   rQ   ModulefloatrG   r
   r   r	   r   rl   r   unusedr   r   r   __static_attributes____classcell__rx   s   @ry   r   r      s9   !#45M   %'+;? D1D1 D1 	D1
 tnD1 hsBII~678D1 D1 D1 
D1 D1L& V 5& 5U68F3CXfEU+U%V 5n YYv V 8F;K P`  	5 	5$4 	5 	5r{   r   c                      ^  \ rS rSr SS\S\S\S\S\S\S	\S
\\S\R                  4      SS4U 4S jjjr	S\
S\\
   4S jrS\
S\
4S jrSrU =r$ )rI      Nin_channelsch1x1ch3x3redch3x3ch5x5redch5x5	pool_projrt   .r&   c	           
      T  > [         T	U ]  5         Uc  [        nU" XSS9U l        [        R
                  " U" XSS9U" X4SSS95      U l        [        R
                  " U" XSS9U" XVSSS95      U l        [        R
                  " [        R                  " SSSSS9U" XSS95      U l	        g )Nr   r/   r(   r1   T)r+   r,   r-   r.   )
rF   rG   rH   branch1rQ   
Sequentialbranch2branch3rR   branch4)
rs   r   r   r   r   r   r   r   rt   rx   s
            ry   rG   Inception.__init__   s     	$J!+!D}}{!<jfgqr>s
 }}{!< xAqA	
 }}LLQq!tL{1=
r{   r|   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nX#XE/nU$ r   r   r   r   r   )rs   r|   r   r   r   r   outputss          ry   r   Inception._forward   sE    ,,q/,,q/,,q/,,q/W6r{   c                 R    U R                  U5      n[        R                  " US5      $ r   )r   rl   r   )rs   r|   r   s      ry   r   Inception.forward   s!    --"yy!$$r{   r   r   )r   r   r   r   r   r   r   rQ   r   rG   r
   r   r   r   r   r   r   s   @ry   rI   rI      s     :>

 
 	

 
 
 
 
 Xc299n56
 

 
@& T&\ % %F % %r{   rI   c                   ~   ^  \ rS rSr  SS\S\S\\S\R                  4      S\	SS4
U 4S	 jjjr
S
\S\4S jrSrU =r$ )rJ      Nr   r!   rt   .r$   r&   c                    > [         TU ]  5         Uc  [        nU" USSS9U l        [        R
                  " SS5      U l        [        R
                  " SU5      U l        [        R                  " US9U l	        g )Nr3   r   r/   i   r@   r>   )
rF   rG   rH   convrQ   rg   fc1fc2rf   r$   )rs   r   r!   rt   r$   rx   s        ry   rG   InceptionAux.__init__   s_     	$J{CQ?	99T4(99T;/zzG,r{   r|   c                    [         R                  " US5      nU R                  U5      n[        R                  " US5      n[         R
                  " U R                  U5      SS9nU R                  U5      nU R                  U5      nU$ )N)   r   r   Tinplace)	Fadaptive_avg_pool2dr   rl   r   relur   r$   r   rs   r|   s     ry   r   InceptionAux.forward   sj    !!!V,IIaLMM!QFF488A;-LLOHHQK r{   )r   r$   r   r   )Nr   )r   r   r   r   r   r   r   rQ   r   r   rG   r
   r   r   r   r   s   @ry   rJ   rJ      so    
 :>-- - Xc299n56	-
 - 
- -  F  r{   rJ   c                   N   ^  \ rS rSrS\S\S\SS4U 4S jjrS\S\4S	 jrS
r	U =r
$ )rH   i
  r   out_channelskwargsr&   Nc                    > [         TU ]  5         [        R                  " X4SS0UD6U l        [        R
                  " USS9U l        g )Nrr   FgMbP?)eps)rF   rG   rQ   rk   r   rp   bn)rs   r   r   r   rx   s       ry   rG   BasicConv2d.__init__  s:    IIkNeNvN	..59r{   r|   c                 p    U R                  U5      nU R                  U5      n[        R                  " USS9$ )NTr   )r   r   r   r   r   s     ry   r   BasicConv2d.forward  s-    IIaLGGAJvva&&r{   )r   r   )r   r   r   r   r   r   rG   r
   r   r   r   r   s   @ry   rH   rH   
  s<    :C :s :c :d :
' 'F ' 'r{   rH   c                   N    \ rS rSr\" S\" \SS9SS\SSS	S
S.0SSSS.S9r\r	Sr
g)r   i  z:https://download.pytorch.org/models/googlenet-1378be20.pthr;   )	crop_sizeie )   r   zOhttps://github.com/pytorch/vision/tree/main/references/classification#googlenetzImageNet-1KgoqQ@gRaV@)zacc@1zacc@5g+?g!rhH@z1These weights are ported from the original paper.)
num_paramsmin_size
categoriesrecipe_metrics_ops
_file_size_docs)url
transformsmeta N)r   r   r   r   r   r   r   r   IMAGENET1K_V1DEFAULTr   r   r{   ry   r   r     sP    H.#>! .g##   L
M& Gr{   r   
pretrained)weightsT)r   progressr   r   r   r&   c                    [         R                  U 5      n UR                  SS5      nU bP  SU;  a  [        USS5        [        USS5        [        USS5        [        US[	        U R
                  S   5      5        [        S0 UD6nU bS  UR                  U R                  USS	95        U(       d  SUl	        SUl
        SUl        U$ [        R                  " S
5        U$ )aM  GoogLeNet (Inception v1) model architecture from
`Going Deeper with Convolutions <http://arxiv.org/abs/1409.4842>`_.

Args:
    weights (:class:`~torchvision.models.GoogLeNet_Weights`, optional): The
        pretrained weights for the model. See
        :class:`~torchvision.models.GoogLeNet_Weights` below for
        more details, and possible values. By default, no pre-trained
        weights are used.
    progress (bool, optional): If True, displays a progress bar of the
        download to stderr. Default is True.
    **kwargs: parameters passed to the ``torchvision.models.GoogLeNet``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/googlenet.py>`_
        for more details about this class.
.. autoclass:: torchvision.models.GoogLeNet_Weights
    :members:
r   FNr    Tr"   r!   r   )r   
check_hashz`auxiliary heads in the pretrained googlenet model are NOT pretrained, so make sure to train themr   )r   verifygetr   rN   r   r   load_state_dictget_state_dictr   rb   rc   rK   rL   )r   r   r   original_aux_logitsmodels        ry   r   r   -  s    *  &&w/G **\59F*!&*;TBflD9fne<fmSl9S5TUEg44hSW4XY"$EEJEJ L	 MMr Lr{   ),rK   collectionsr   	functoolsr   typingr   r   r   r   r	   rl   torch.nnrQ   torch.nn.functional
functionalr   r
   transforms._presetsr   utilsr   _apir   r   r   _metar   _utilsr   r   __all__r   __annotations__r   r   r   rI   rJ   rH   r   r   r   r   r   r{   ry   <module>r      s    "  7 7      5 ' 6 6 ' B c 02Z[ .4XfEUfnoufv#w    % X5		 X5v,%		 ,%^ 299  F	'")) 	' . ,0A0O0O!PQ8<t *(#45 * *_b *gp * R *r{   