
    h1                        d dl Z d dlmZ d dlmZ d dlmZmZmZ d dl	Z	d dl
mZ d dlmc mZ d dl	mZ ddlmZ ddlmZ d	d
lmZmZmZ d	dlmZ d	dlmZmZ g dZ edg d      Zeee   ee   de_        eZ  G d dejB                        Z" G d dejB                        Z# G d dejB                        Z$ G d dejB                        Z% G d de      Z& e        ede&jN                  f      ddddee&   de(d ed!e"fd"              Z)y)#    N)
namedtuple)partial)AnyCallableOptional)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                        e Zd ZddgZ	 	 	 	 	 	 	 ddedededee   deeede	j                  f         ded	ed
df fdZded
efdZded
eeee   ee   f   fdZej$                  j&                  dededee   d
efd       Zded
efdZ xZS )r   
aux_logitstransform_inputNnum_classesinit_weightsblocks.dropoutdropout_auxreturnc           	         t         |           t        |        |t        t        t
        g}|t        j                  dt               d}t        |      dk7  rt        dt        |             |d   }|d   }	|d   }
|| _        || _         |ddd	dd
      | _        t        j                  ddd      | _         |ddd      | _         |dddd      | _        t        j                  ddd      | _         |	ddddddd      | _         |	ddddddd      | _        t        j                  ddd      | _         |	ddddddd      | _         |	ddddddd      | _         |	ddddddd      | _         |	ddddddd      | _         |	ddddddd      | _        t        j                  ddd      | _         |	d dddddd      | _         |	d d!dd!ddd      | _        |r! |
d||"      | _         |
d||"      | _         nd | _        d | _         t        jB                  d#      | _"        t        jF                  |$      | _$        t        jJ                  d%|      | _&        |r| jO                         D ]  }tQ        |t        jR                        stQ        |t        jJ                        r9tT        j                  jV                  jY                  |jZ                  d&d'd(d)       ptQ        |t        j\                        st        jV                  j_                  |jZ                  d       t        jV                  j_                  |j`                  d        y y )*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               Z/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/torchvision/models/googlenet.pyrD   z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kRDI+CkRDIDIDI++F3zzG,))D+.\\^ 1a+z!RYY/GHHMM//sPRVW/X2>>2GG%%ahh2GG%%affa01     xc                 "   | j                   rt        j                  |d d df   d      dz  dz   }t        j                  |d d df   d      dz  dz   }t        j                  |d d df   d      dz  d	z   }t        j                  |||fd      }|S )
Nr   r   gZd;O?gQgy&1?gI+r	   g?gMbȿ)r   ri   	unsqueezecat)rp   rx   x_ch0x_ch1x_ch2s        rv   _transform_inputzGoogLeNet._transform_inputf   s    OOAadGQ/;?BUUEOOAadGQ/;?BUUEOOAadGQ/;?BUUE		5%/3Arw   c                 j   | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }d }| j                  | j                  r| j                  |      }| j                  |      }| j                  |      }| j                  |      }d }| j                  | j                  r| j                  |      }| j                  |      }| j!                  |      }| j#                  |      }| j%                  |      }| j'                  |      }t)        j*                  |d      }| j-                  |      }| j/                  |      }|||fS Nr   )rM   rP   rQ   rR   rS   rT   rU   rV   rW   r_   trainingrX   rY   rZ   r`   r[   r\   r]   r^   rb   ri   flattenr!   re   )rp   rx   r_   r`   s       rv   _forwardz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$}rw   r`   r_   c                 P    | j                   r| j                  rt        |||      S |S N)r   r   r   )rp   rx   r`   r_   s       rv   eager_outputszGoogLeNet.eager_outputs   s#    ==T__$Qd33Hrw   c                 ,   | j                  |      }| j                  |      \  }}}| j                  xr | j                  }t        j
                  j                         r$|st        j                  d       t        |||      S | j                  |||      S )Nz8Scripted GoogleNet always returns GoogleNetOutputs Tuple)r   r   r   r   ri   jitis_scriptingrH   rI   r   r   )rp   rx   r`   r_   aux_defineds        rv   forwardzGoogLeNet.forward   s|    !!!$a(4mm799!!#XY#AtT22%%at44rw   )i  TFNNg?ffffff?)__name__
__module____qualname____constants__intboolr   listr   rN   ModulefloatrD   r   r   tupler   ri   r   unusedr   r   r   __classcell__ru   s   @rv   r   r      s.   !#45M   %'+;? D1D1 D1 	D1
 tnD1 hsBII~678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 	5rw   r   c                        e Zd Z	 ddededededededed	eed
ej                  f      ddf fdZde	de
e	   fdZde	de	fdZ xZS )rF   Nin_channelsch1x1ch3x3redch3x3ch5x5redch5x5	pool_projrq   .r#   c	           	         t         	|           |t        } |||d      | _        t	        j
                   |||d       |||dd            | _        t	        j
                   |||d       |||dd            | _        t	        j
                  t	        j                  dddd       |||d            | _	        y )Nr   r,   r%   r.   T)r(   r)   r*   r+   )
rC   rD   rE   branch1rN   
Sequentialbranch2branch3rO   branch4)
rp   r   r   r   r   r   r   r   rq   ru   s
            rv   rD   zInception.__init__   s     	$J!+u!D}}{H!<jSXfgqr>s
 }}{H!< xAqA	
 }}LLQq!tL{I1=
rw   rx   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }||||g}|S r   )r   r   r   r   )rp   rx   r   r   r   r   outputss          rv   r   zInception._forward   sI    ,,q/,,q/,,q/,,q/GWg6rw   c                 P    | j                  |      }t        j                  |d      S r   )r   ri   r{   )rp   rx   r   s      rv   r   zInception.forward   s!    --"yy!$$rw   r   )r   r   r   r   r   r   rN   r   rD   r   r   r   r   r   r   s   @rv   rF   rF      s     :>

 
 	

 
 
 
 
 Xc299n56
 

@& T&\ % %F %rw   rF   c                   n     e Zd Z	 	 ddededeedej                  f      deddf
 fdZ	d	e
de
fd
Z xZS )rG   Nr   r   rq   .r!   r#   c                     t         |           |t        } ||dd      | _        t	        j
                  dd      | _        t	        j
                  d|      | _        t	        j                  |      | _	        y )Nr0   r   r,   i   r=   r;   )
rC   rD   rE   convrN   rd   fc1fc2rc   r!   )rp   r   r   rq   r!   ru   s        rv   rD   zInceptionAux.__init__   s_     	$J{CQ?	99T4(99T;/zzG,rw   rx   c                    t        j                  |d      }| j                  |      }t        j                  |d      }t        j
                  | j                  |      d      }| j                  |      }| j                  |      }|S )N)   r   r   Tinplace)	Fadaptive_avg_pool2dr   ri   r   relur   r!   r   rp   rx   s     rv   r   zInceptionAux.forward   sj    !!!V,IIaLMM!QFF488A;-LLOHHQK rw   )Nr   )r   r   r   r   r   r   rN   r   r   rD   r   r   r   r   s   @rv   rG   rG      se    
 :>-- - Xc299n56	-
 - 
-  F rw   rG   c                   @     e Zd Zdedededdf fdZdedefdZ xZS )	rE   r   out_channelskwargsr#   Nc                     t         |           t        j                  ||fddi|| _        t        j
                  |d      | _        y )Nro   FgMbP?)eps)rC   rD   rN   rh   r   rm   bn)rp   r   r   r   ru   s       rv   rD   zBasicConv2d.__init__  s<    IIk<NeNvN	..59rw   rx   c                 t    | j                  |      }| j                  |      }t        j                  |d      S )NTr   )r   r   r   r   r   s     rv   r   zBasicConv2d.forward  s-    IIaLGGAJvva&&rw   )	r   r   r   r   r   rD   r   r   r   r   s   @rv   rE   rE   
  s7    :C :s :c :d :
' 'F 'rw   rE   c                   R    e Zd Z ed eed      ddedddd	d
idddd      ZeZy)r   z:https://download.pytorch.org/models/googlenet-1378be20.pthr8   )	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metaN)	r   r   r   r   r   r
   r   IMAGENET1K_V1DEFAULT rw   rv   r   r     sP    H.#>! .g##   L
M& Grw   r   
pretrained)weightsT)r   progressr   r   r   r#   c                    t         j                  |       } |j                  dd      }| Nd|vrt        |dd       t        |dd       t        |dd       t        |dt	        | j
                  d                t        di |}| P|j                  | j                  |d	             |sd|_	        d|_
        d|_        |S t        j                  d
       |S )a  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   rK   r   r   load_state_dictget_state_dictr   r_   r`   rH   rI   )r   r   r   original_aux_logitsmodels        rv   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 Lrw   )*rH   collectionsr   	functoolsr   typingr   r   r   ri   torch.nnrN   torch.nn.functional
functionalr   r   transforms._presetsr
   utilsr   _apir   r   r   _metar   _utilsr   r   __all__r   __annotations__r   r   r   rF   rG   rE   r   r   r   r   r   rw   rv   <module>r      s    "  * *      5 ' 6 6 ' B c 02Z[ .4XfEUfnoufv#w    % X5		 X5v,%		 ,%^ 299  F	'")) 	' . ,0A0O0O!PQ8<t *(#45 * *_b *gp * R *rw   