Ë
    –\;j-  ã                   óà   — d dl 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 G d	„ d
ej(                  «      Z G d„ dej(                  «      Zd„ Zdd„Zy)é    N)Ú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Ú 7f0f9f737132e02732d75a1459d98a43c                   ó*   ‡ — e Zd Z	 	 dˆ fd„	Zd„ Zˆ xZS )ÚConvPoolLayerc	                 óø   •— t         ‰	| �  «        |dk(  r
t        «       nd | _        t	        ||||||t        t        | |«      ¬«      t        t        | |«      ¬«      ¬«      | _        t        ddd¬«      | _	        y )NÚrelu©Úinitializer)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingÚgroupsÚweight_attrÚ	bias_attré   é   r   )r   r   r   )
ÚsuperÚ__init__r	   r   r   r   r
   Ú_convr   Ú_pool)
ÚselfÚinput_channelsÚoutput_channelsÚfilter_sizer   r   Ústdvr   ÚactÚ	__class__s
            €úeG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/vision/models/alexnet.pyr   zConvPoolLayer.__init__$   ss   ø€ ô 	‰ÑÔà! Všm”D”F°ˆŒ	äØ&Ø(Ø#ØØØÜ!¬g°t°e¸TÓ.BÔCÜ¬G°T°E¸4Ó,@ÔAô	
ˆŒ
ô ¨1°QÀÔBˆ�
ó    c                 ó„   — | j                  |«      }| j                  �| j                  |«      }| j                  |«      }|S )N)r    r   r!   ©r"   ÚinputsÚxs      r)   ÚforwardzConvPoolLayer.forward?   s9   € Ø�J‰J�vÓˆØ�9‰9Ð Ø—	‘	˜!“ˆAØ�J‰J�q‹MˆØˆr*   )é   N)Ú__name__Ú
__module__Ú__qualname__r   r/   Ú__classcell__©r(   s   @r)   r   r   #   s   ø„ ð ØõCö6r*   r   c                   ó*   ‡ — e Zd ZdZdˆ fd„	Z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:: python

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

            >>> alexnet = AlexNet()
            >>> x = paddle.rand([1, 3, 224, 224])
            >>> out = alexnet(x)
            >>> print(out.shape)
            [1, 1000]
    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kD  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        | |«      ¬«      ¬«      | _        y y )Ng      ð?ik  r   é@   é   é   r   r   )r'   i@  éÀ   é   r0   iÀ  i€  r   )r   r   r   r   i€  é   i 	  r   i $  g      à?Údownscale_in_infer)ÚpÚmodei   )Úin_featuresÚout_featuresr   r   )r   r   Únum_classesÚmathÚsqrtr   Ú_conv1Ú_conv2r   r   r
   Ú_conv3Ú_conv4Ú_conv5r   Ú_drop1r   Ú_fc6Ú_drop2Ú_fc7Ú_fc8)r"   rD   r&   r(   s      €r)   r   zAlexNet.__init__`   s  ø€ Ü‰ÑÔØ&ˆÔØ”T—Y‘Y˜{Ó+Ñ+ˆÜ# A r¨2¨q°!°T¸vÔFˆŒØ”T—Y‘Y˜zÓ*Ñ*ˆÜ# B¨¨Q°°1°dÀÔGˆŒØ”T—Y‘Y˜{Ó+Ñ+ˆÜØØØØØÜ!¬g°t°e¸TÓ.BÔCÜ¬G°T°E¸4Ó,@ÔAô
ˆŒð ”T—Y‘Y˜{Ó+Ñ+ˆÜØØØØØÜ!¬g°t°e¸TÓ.BÔCÜ¬G°T°E¸4Ó,@ÔAô
ˆŒð ”T—Y‘Y˜{Ó+Ñ+ˆÜ# C¨¨a°°A°tÀÔHˆŒà×Ñ˜aÒØœŸ™ ;Ó/Ñ/ˆDÜ! CÐ.BÔCˆDŒKÜØ'Ø!Ü%´'¸4¸%ÀÓ2FÔGÜ#´¸¸¸tÓ0DÔEô	ˆDŒIô " CÐ.BÔCˆDŒKÜØ Ø!Ü%´'¸4¸%ÀÓ2FÔGÜ#´¸¸¸tÓ0DÔEô	ˆDŒIô Ø Ø(Ü%´'¸4¸%ÀÓ2FÔGÜ#´¸¸¸tÓ0DÔEô	ˆD�Ið#  r*   c                 óP  — | j                  |«      }| j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }| j                  dkD  r—t        j                  |dd¬«      }| j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }| j                  |«      }t        j                  |«      }| j                  |«      }|S )Nr   r0   éÿÿÿÿ)Ú
start_axisÚ	stop_axis)rG   rH   rI   ÚFr   rJ   rK   rD   ÚpaddleÚflattenrL   rM   rN   rO   rP   r,   s      r)   r/   zAlexNet.forward–   sÞ   € Ø�K‰K˜ÓˆØ�K‰K˜‹NˆØ�K‰K˜‹NˆÜ�F‰F�1‹IˆØ�K‰K˜‹NˆÜ�F‰F�1‹IˆØ�K‰K˜‹Nˆà×Ñ˜aÒÜ—‘˜q¨Q¸"Ô=ˆAØ—‘˜A“ˆAØ—	‘	˜!“ˆAÜ—‘�q“	ˆAØ—‘˜A“ˆAØ—	‘	˜!“ˆAÜ—‘�q“	ˆAØ—	‘	˜!“ˆAàˆr*   )iè  )r1   r2   r3   Ú__doc__r   r/   r4   r5   s   @r)   r7   r7   G   s   ø„ ñõ04ölr*   r7   c                 óÐ   — t        di |¤Ž}|rX| t        v s
J | › d�«       ‚t        t        |    d   t        |    d   «      }t        j                  |«      }|j                  |«       |S )NzJ model do not have a pretrained model now, you should set pretrained=Falser   r0   © )r7   Ú
model_urlsr   rV   ÚloadÚ	load_dict)ÚarchÚ
pretrainedÚkwargsÚmodelÚweight_pathÚparams         r)   Ú_alexnetrd   ¬   sx   € ÜÑ�fÑ€Eáà”JÑð	_àˆVÐ]Ð^ó	_Øä/Ü�tÑ˜QÑ¤¨DÑ!1°!Ñ!4ó
ˆô —‘˜KÓ(ˆØ�‰˜Ôà€Lr*   c                 ó   — 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:: python

            >>> 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)
            [1, 1000]
    r   )rd   )r_   r`   s     r)   r   r   ½   s   € ô> �I˜zÑ4¨VÑ4Ð4r*   )F)rE   rV   Úpaddle.nn.functionalr   Ú
functionalrU   Úpaddle.base.param_attrr   Ú	paddle.nnr   r   r   r   r	   Úpaddle.nn.initializerr
   Úpaddle.utils.downloadr   r[   Ú__all__ÚLayerr   r7   rd   r   rZ   r*   r)   Ú<module>rn      sk   ðó ã ß  Ð  Ý Ý ,ß >Õ >Ý )Ý ;ð ð ð€
ð €ô!�B—H‘Hô !ôHbˆb�h‰hô bòJô"5r*   