
    ёi(%                       S SK Jr  S SKJrJr  S SKJrJr  S SKrS SK	J
s  Jr  S SKJ
r
  S SKJr  S SKJrJrJrJrJrJr  S SKJr  S S	KJr  \(       a  S S
KJr  S SKJr   " S S\5      r/ rSS0rSS jr  " S S\
RB                  5      r" " S S\
RB                  5      r# " S S\
RB                  5      r$ S     SS jjr%g)    )annotations)TYPE_CHECKING	TypedDict)NotRequiredUnpackN)nn)	ParamAttr)AdaptiveAvgPool2D	AvgPool2DConv2DDropoutLinear	MaxPool2D)Uniform)get_weights_path_from_url)Tensor)Size2c                  *    \ rS rSr% S\S'   S\S'   Srg)_GoogLeNetOptions+   zNotRequired[int]num_classeszNotRequired[bool]	with_pool N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       ^/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/vision/models/googlenet.pyr   r   +   s    %%$$r    r   	googlenet)zWhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GoogLeNet_pretrained.pdparams 80c06f038e905c53ab32c40eca6e26aec                J    SUS-  U -  -  S-  n[        [        U* U5      S9nU$ )Ng      @   g      ?)initializer)r	   r   )channelsfilter_sizestdv
param_attrs       r!   xavierr+   :   s3    ;>H,-#5Dwud';<Jr    c                  P   ^  \ rS rSr  S         SU 4S jjjrSS jrSrU =r$ )	ConvLayer@   c           
     V   > [         TU ]  5         [        UUUUUS-
  S-  USS9U l        g )N   r%   F)in_channelsout_channelskernel_sizestridepaddinggroups	bias_attr)super__init__r   _conv)selfnum_channelsnum_filtersr(   r4   r6   	__class__s         r!   r9   ConvLayer.__init__A   s:     	$$# 1_*

r    c                (    U R                  U5      nU$ )Nr:   )r;   inputsys      r!   forwardConvLayer.forwardU   s    JJvr    rA   )r0   r0   )
r<   intr=   rF   r(   rF   r4   r   r6   rF   rB   r   returnr   r   r   r   r   r9   rD   r   __classcell__r>   s   @r!   r-   r-   @   sO     

 
 	

 
 
 
( r    r-   c                  V   ^  \ rS rSr                SU 4S jjrSS jrSrU =r$ )	InceptionZ   c	                  > [         T	U ]  5         [        XS5      U l        [        XS5      U l        [        XES5      U l        [        XS5      U l        [        XgS5      U l        [        SSSS9U l	        [        XS5      U l
        g )Nr0         )r3   r4   r5   )r8   r9   r-   _conv1_conv3r_conv3_conv5r_conv5r   _pool_convprj)
r;   input_channelsoutput_channelsfilter1filter3Rfilter3filter5Rfilter5projr>   s
            r!   r9   Inception.__init__[   st     	; 1=15 1=151QB
!.:r    c                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[        R                  " X$Xh/SS9n	[        R                  " U	5      n	U	$ )Nr0   axis)rR   rS   rT   rU   rV   rW   rX   paddleconcatFrelu)
r;   rB   conv1conv3rconv3conv5rconv5poolconvprjcats
             r!   rD   Inception.forwardq   s    F#f%F#f%F#zz&!--%mmU5:CffSk
r    )rR   rT   rS   rV   rU   rX   rW   )rY   rF   rZ   rF   r[   rF   r\   rF   r]   rF   r^   rF   r_   rF   r`   rF   rG   rI   rK   s   @r!   rM   rM   Z   s`    ;; ; 	;
 ; ; ; ; ;, r    rM   c                  T   ^  \ rS rSr% SrS\S'   S\S'   S
SU 4S jjjrSS jrS	rU =r	$ )	GoogLeNet   aN  GoogLeNet (Inception v1) model architecture from
`"Going Deeper with Convolutions" <https://arxiv.org/pdf/1409.4842.pdf>`_.

Args:
    num_classes (int, optional): Output dim of last fc layer. If num_classes <= 0, last fc layer
        will not be defined. Default: 1000.
    with_pool (bool, optional): Use pool before the last fc layer or not. Default: True.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of GoogLeNet (Inception v1) model.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> from paddle.vision.models import GoogLeNet

        >>> # Build model
        >>> model = GoogLeNet()

        >>> x = paddle.rand([1, 3, 224, 224])
        >>> out, out1, out2 = model(x)

        >>> print(out.shape, out1.shape, out2.shape)
        paddle.Size([1, 1000]) paddle.Size([1, 1000]) paddle.Size([1, 1000])
rF   r   boolr   c           
       > [         TU ]  5         Xl        X l        [	        SSSS5      U l        [        SSS9U l        [	        SSS5      U l        [	        SSS5      U l	        [        SSSSS	S
SS5      U l        [        SSS	S	SSSS5      U l        [        SSSSSS
SS5      U l        [        SSSSSSSS5      U l        [        SSS	S	SSSS5      U l        [        SSSSSSSS5      U l        [        SSSSSSS	S	5      U l        [        SSSSSSS	S	5      U l        [        SSSSSSS	S	5      U l        U(       a.  [)        S5      U l        [-        SSS9U l        [-        SSS9U l        US:  a  [3        SSS9U l        [7        S U[9        S S5      S!9U l        [	        SS	S5      U l        [7        S"S [9        S#S5      S!9U l        [3        S$SS9U l         [7        S U[9        S S5      S!9U l!        [	        SS	S5      U l"        [7        S"S [9        S#S5      S!9U l#        [3        S$SS9U l$        [7        S U[9        S S5      S!9U l%        g g )%NrP   r.      r%   )r3   r4   r0      `                i     0   i      p            i   i  i@  i@  i  rQ   r   g?downscale_in_infer)pmodei   )weight_attri  i   gffffff?)&r8   r9   r   r   r-   r:   r   rW   _conv_1_conv_2rM   _ince3a_ince3b_ince4a_ince4b_ince4c_ince4d_ince4e_ince5a_ince5br
   _pool_5r   _pool_o1_pool_o2r   _dropr   r+   _fc_out_conv_o1_fc_o1_drop_o1_out1_conv_o2_fc_o2_drop_o2_out2)r;   r   r   r>   s      r!   r9   GoogLeNet.__init__   s<   &"q"a+
1Q7
 R+ S!, c2r3BC c3S"b"E c3CRD c3S"b"E c3S"b"E c3S"b"E c3S"c3G c3S"c3G c3S"c3G,Q/DL%!A>DM%!A>DM? 3-ABDJ!kvdADL
 &c32DM taIDK#c0DEDMkvdAODJ &c32DM taIDK#c0DEDMkvdAODJ# 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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XSUpnU R                  (       a3  U R                  U5      nU R                  U5      nU R!                  U5      nU R"                  S:  Ga  U R%                  U5      n[&        R(                  " USS/S9nU R+                  U5      nU R-                  U5      n[&        R.                  " USSS9nU R1                  U5      n[2        R4                  " U5      nU R7                  U5      nU R9                  U5      nU R;                  U5      n[&        R.                  " USSS9nU R=                  U5      nU R?                  U5      nU RA                  U5      nXgU4$ )Nr   r%   rP   rc   r0   )
start_axis	stop_axis)!r:   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   re   squeezer   r   flattenr   rg   rh   r   r   r   r   r   r   )	r;   rB   xince4aince4dince5boutout1out2s	            r!   rD   GoogLeNet.forward   s   JJvJJqMLLOLLOJJqMLLOLLOJJqMaLL LLOaLL JJqMLLOa &4>>,,s#C==&D==&Da**S/C..Aq62C,,s#C==&D>>$1CD;;t$D66$<D==&D::d#D==&D>>$1CD;;t$D==&D::d#D$r    )r:   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   )i  T)r   rF   r   ru   rH   None)rB   r   rH   ztuple[Tensor, Tensor, Tensor])
r   r   r   r   __doc__r   r9   rD   r   rJ   rK   s   @r!   rs   rs      s,    6 O/P /Pb. .r    rs   c                    [        S0 UD6nSnU (       a[  U[        ;   d
   U S35       e[        [        U   S   [        U   S   5      n[        R                  " U5      nUR                  U5        U$ )a  GoogLeNet (Inception v1) model architecture from
`"Going Deeper with Convolutions" <https://arxiv.org/pdf/1409.4842.pdf>`_.

Args:
    pretrained (bool, optional): Whether to load pre-trained weights. If True, returns a model pre-trained
        on ImageNet. Default: False.
    **kwargs (optional): Additional keyword arguments. For details, please refer to :ref:`GoogLeNet <api_paddle_vision_models_GoogLeNet>`.

Returns:
    :ref:`api_paddle_nn_Layer`. An instance of GoogLeNet (Inception v1) model.

Examples:
    .. code-block:: python

        >>> import paddle
        >>> from paddle.vision.models import googlenet

        >>> # Build model
        >>> model = googlenet()

        >>> # Build model and load imagenet pretrained weight
        >>> # model = googlenet(pretrained=True)

        >>> x = paddle.rand([1, 3, 224, 224])
        >>> out, out1, out2 = model(x)

        >>> print(out.shape, out1.shape, out2.shape)
        paddle.Size([1, 1000]) paddle.Size([1, 1000]) paddle.Size([1, 1000])
r"   zJ model do not have a pretrained model now, you should set pretrained=Falser   r0   r   )rs   
model_urlsr   re   loadset_dict)
pretrainedkwargsmodelarchweight_pathparams         r!   r"   r"     s    @ EDz! 	
f^_	
! 0tQD!1!!4
 K(uLr    )r'   rF   r(   rF   rH   r	   )F)r   ru   r   zUnpack[_GoogLeNetOptions]rH   rs   )&
__future__r   typingr   r   typing_extensionsr   r   re   paddle.nn.functionalr   
functionalrg   paddle.base.param_attrr	   	paddle.nnr
   r   r   r   r   r   paddle.nn.initializerr   paddle.utils.downloadr   r   paddle._typingr   r   __all__r   r+   Layerr-   rM   rs   r"   r   r    r!   <module>r      s    #
 2       ,  * ;$%I %
   
 4% %P~ ~D ,,(A,,r    