
    {-j                    D   d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	Z	d dl
mc mZ d dl	mZ d dlmZ d dlmZmZmZmZmZ d dlmZ d d	lmZ d
diZg Zerd dl	mZ d dlmZ  G d de          Z G d dej                   Z! G d dej                   Z"ddZ#	 dd dZ$dS )!    )annotationsN)TYPE_CHECKING	TypedDict)NotRequiredUnpack)nn)	ParamAttr)Conv2DDropoutLinear	MaxPool2DReLU)Uniform)get_weights_path_from_urlalexnet)zUhttps://paddle-imagenet-models-name.bj.bcebos.com/dygraph/AlexNet_pretrained.pdparams 7f0f9f737132e02732d75a1459d98a43)Tensor)Size2c                      e Zd ZU ded<   dS )_AlexNetOptionszNotRequired[int]num_classesN)__name__
__module____qualname____annotations__     \/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/vision/models/alexnet.pyr   r   .   s         %%%%%%r   r   c                  .     e Zd Z	 	 dd fdZddZ xZS )ConvPoolLayer   Ninput_channelsintoutput_channelsfilter_sizer   stridepaddingstdvfloatgroupsact
str | NonereturnNonec	                X   t                                                       |dk    rt                      nd | _        t	          ||||||t          t          | |                    t          t          | |                              | _        t          ddd          | _	        d S )Nreluinitializer)in_channelsout_channelskernel_sizer&   r'   r*   weight_attr	bias_attr      r   )r5   r&   r'   )
super__init__r   r0   r
   r	   r   _convr   _pool)
selfr"   r$   r%   r&   r'   r(   r*   r+   	__class__s
            r   r;   zConvPoolLayer.__init__3   s     	!VmmDFFF	&(#!gteT.B.BCCCGTE4,@,@AAA	
 	
 	

 1QBBB


r   inputsr   c                    |                      |          }| j        |                     |          }|                     |          }|S )N)r<   r0   r=   r>   r@   xs      r   forwardzConvPoolLayer.forwardN   s>    JJv9 		!AJJqMMr   )r!   N)r"   r#   r$   r#   r%   r   r&   r   r'   r   r(   r)   r*   r#   r+   r,   r-   r.   r@   r   r-   r   )r   r   r   r;   rD   __classcell__r?   s   @r   r    r    2   se         C C C C C C C6       r   r    c                  :     e Zd ZU dZded<   dd fdZdd
Z xZS )AlexNeta  AlexNet model from
    `"ImageNet Classification with Deep Convolutional Neural Networks"
    <https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.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.

    Returns:
        :ref:`api_paddle_nn_Layer`. An instance of AlexNet model.

    Examples:
        .. code-block:: pycon

            >>> import paddle
            >>> from paddle.vision.models import AlexNet

            >>> alexnet = AlexNet()
            >>> x = paddle.rand([1, 3, 224, 224])
            >>> out = alexnet(x)
            >>> print(out.shape)
            paddle.Size([1, 1000])
    r#   r     r-   r.   c                   t                                                       || _        dt          j        d          z  }t          ddddd|d	          | _        dt          j        d
          z  }t          ddddd|d	          | _        dt          j        d          z  }t          dddddt          t          | |                    t          t          | |                              | _        dt          j        d          z  }t          dddddt          t          | |                    t          t          | |                              | _        dt          j        d          z  }t          ddddd|d	          | _        | j        dk    r;dt          j        d          z  }t          dd          | _        t!          ddt          t          | |                    t          t          | |                              | _        t          dd          | _        t!          ddt          t          | |                    t          t          | |                              | _        t!          d|t          t          | |                    t          t          | |                              | _        d S d S )Ng      ?ik  r8   @         r9   r0   )r+   i@        r!   i  i  r1   )r&   r'   r6   r7   i     i 	  r   i $  g      ?downscale_in_infer)pmodei   )in_featuresout_featuresr6   r7   )r:   r;   r   mathsqrtr    _conv1_conv2r
   r	   r   _conv3_conv4_conv5r   _drop1r   _fc6_drop2_fc7_fc8)r>   r   r(   r?   s      r   r;   zAlexNet.__init__q   s   &TY{+++#Ar2q!TvFFFTYz***#BQ1dGGGTY{+++!gteT.B.BCCCGTE4,@,@AAA
 
 
 TY{+++!gteT.B.BCCCGTE4,@,@AAA
 
 
 TY{+++#CaAtHHHa;///D!C.BCCCDK'!%'4%2F2FGGG#t0D0DEEE	  DI "C.BCCCDK !%'4%2F2FGGG#t0D0DEEE	  DI  (%'4%2F2FGGG#t0D0DEEE	  DIII#  r   r@   r   c                   |                      |          }|                     |          }|                     |          }t          j        |          }|                     |          }t          j        |          }|                     |          }| j        dk    rt          j	        |dd          }| 
                    |          }|                     |          }t          j        |          }|                     |          }|                     |          }t          j        |          }|                     |          }|S )Nr   r!   )
start_axis	stop_axis)rY   rZ   r[   Fr0   r\   r]   r   paddleflattenr^   r_   r`   ra   rb   rB   s      r   rD   zAlexNet.forward   s    KKKKNNKKNNF1IIKKNNF1IIKKNNaqQ"===AAA		!Aq		AAA		!Aq		A		!Ar   )rJ   )r   r#   r-   r.   rE   )r   r   r   __doc__r   r;   rD   rF   rG   s   @r   rI   rI   V   sq          0 4 4 4 4 4 4 4l       r   rI   archstr
pretrainedboolkwargsUnpack[_AlexNetOptions]r-   c                   t          di |}|rq| t          v sJ |  d            t          t          |          d         t          |          d                   }t          j        |          }|                    |           |S )NzJ model do not have a pretrained model now, you should set pretrained=Falser   r!   r   )rI   
model_urlsr   rh   load	load_dict)rk   rm   ro   modelweight_pathparams         r   _alexnetrx      s     fE 	z!!!___ "!! 0tQD!1!!4
 
 K((Lr   Fc                    t          d| fi |S )a  AlexNet model from
    `"ImageNet Classification with Deep Convolutional Neural Networks"
    <https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.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:`AlexNet <api_paddle_vision_AlexNet>`.

    Returns:
        :ref:`api_paddle_nn_Layer`. An instance of AlexNet model.

    Examples:
        .. code-block:: pycon

            >>> import paddle
            >>> from paddle.vision.models import alexnet

            >>> # Build model
            >>> model = alexnet()

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

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

            >>> print(out.shape)
            paddle.Size([1, 1000])
    r   )rx   )rm   ro   s     r   r   r      s    B Iz44V444r   )rk   rl   rm   rn   ro   rp   r-   rI   )F)rm   rn   ro   rp   r-   rI   )%
__future__r   rW   typingr   r   typing_extensionsr   r   rh   paddle.nn.functionalr   
functionalrg   paddle.base.param_attrr	   	paddle.nnr
   r   r   r   r   paddle.nn.initializerr   paddle.utils.downloadr   rr   __all__r   paddle._typingr   r   Layerr    rI   rx   r   r   r   r   <module>r      s   # " " " " "        
 2 1 1 1 1 1 1 1                          , , , , , , > > > > > > > > > > > > > > ) ) ) ) ) ) ; ; ; ; ; ;  
  &$$$$$$& & & & &) & & &! ! ! ! !BH ! ! !Hd d d d dbh d d dN   ( !5 !5 !5 !5 !5 !5 !5r   