U
    ­Ê¹j;"  ã                   @   sr  d dl mZ d dlmZmZ d dlZd dlmZ d dlm  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 dddddgZG dd„ dejƒZG dd„ dejƒZeee eeedœdd„ZedddœZG dd„ deƒZG dd„ deƒZ eƒ edej!fd�dddœee eeedœd d„ƒƒZ"eƒ ede j!fd�dddœee  eeedœd!d„ƒƒZ#dS )"é    )Úpartial)ÚAnyÚOptionalNé   )ÚImageClassification)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interfaceÚ
SqueezeNetÚSqueezeNet1_0_WeightsÚSqueezeNet1_1_WeightsÚsqueezenet1_0Úsqueezenet1_1c                       s>   e Zd Zeeeeddœ‡ fdd„Zejejdœdd„Z‡  ZS )ÚFireN)ÚinplanesÚsqueeze_planesÚexpand1x1_planesÚexpand3x3_planesÚreturnc                    sv   t ƒ  ¡  || _tj||dd�| _tjdd�| _tj||dd�| _tjdd�| _	tj||ddd�| _
tjdd�| _d S )Nr   ©Úkernel_sizeT©Zinplaceé   )r   Úpadding)ÚsuperÚ__init__r   ÚnnÚConv2dÚsqueezeÚReLUÚsqueeze_activationÚ	expand1x1Úexpand1x1_activationÚ	expand3x3Úexpand3x3_activation)Úselfr   r   r   r   ©Ú	__class__© ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchvision/models/squeezenet.pyr       s    
zFire.__init__©Úxr   c                 C   s8   |   |  |¡¡}t |  |  |¡¡|  |  |¡¡gd¡S ©Nr   )r%   r#   ÚtorchÚcatr'   r&   r)   r(   ©r*   r0   r-   r-   r.   Úforward   s
     ÿzFire.forward)	Ú__name__Ú
__module__Ú__qualname__Úintr    r2   ÚTensorr5   Ú__classcell__r-   r-   r+   r.   r      s   
r   c                       s>   e Zd Zdeeeddœ‡ fdd„Zejejdœd	d
„Z	‡  Z
S )r   Ú1_0éè  ç      à?N)ÚversionÚnum_classesÚdropoutr   c                    s:  t ƒ  ¡  t| ƒ || _|dkrÐt tjddddd�tjdd�tjdddd	�t	dd
ddƒt	dd
ddƒt	ddddƒtjdddd	�t	ddddƒt	ddddƒt	ddddƒt	ddddƒtjdddd	�t	ddddƒ¡| _
nÊ|dk�rŠt tjddddd�tjdd�tjdddd	�t	dd
ddƒt	dd
ddƒtjdddd	�t	ddddƒt	ddddƒtjdddd	�t	ddddƒt	ddddƒt	ddddƒt	ddddƒ¡| _
ntd|› d�ƒ‚tjd| jdd�}t tj|d�|tjdd�t d¡¡| _|  ¡ D ]X}t|tjƒ�rÜ||k�rtj|jddd� nt |j¡ |jd k	�rÜt |jd¡ �qÜd S )Nr<   r   é`   é   r   )r   ÚstrideTr   )r   rD   Z	ceil_modeé   é@   é€   é    é   é0   éÀ   i€  i   Ú1_1zUnsupported SqueezeNet version z: 1_0 or 1_1 expectedr   r   )Úp)r   r   g        g{®Gáz„?)ZmeanZstdr   )r   r    r   r@   r!   Z
Sequentialr"   r$   Z	MaxPool2dr   ÚfeaturesÚ
ValueErrorZDropoutZAdaptiveAvgPool2dÚ
classifierÚmodulesÚ
isinstanceÚinitZnormal_ÚweightZkaiming_uniform_ZbiasZ	constant_)r*   r?   r@   rA   Z
final_convÚmr+   r-   r.   r    %   sd    

ó

ó
  
 ÿ
zSqueezeNet.__init__r/   c                 C   s    |   |¡}|  |¡}t |d¡S r1   )rN   rP   r2   Úflattenr4   r-   r-   r.   r5   ^   s    

zSqueezeNet.forward)r<   r=   r>   )r6   r7   r8   Ústrr9   Úfloatr    r2   r:   r5   r;   r-   r-   r+   r.   r   $   s   9)r?   ÚweightsÚprogressÚkwargsr   c                 K   sJ   |d k	rt |dt|jd ƒƒ t| f|Ž}|d k	rF| |j|dd�¡ |S )Nr@   Ú
categoriesT)rZ   Z
check_hash)r   ÚlenÚmetar   Zload_state_dictZget_state_dict)r?   rY   rZ   r[   Úmodelr-   r-   r.   Ú_squeezenetd   s    r`   z@https://github.com/pytorch/vision/pull/49#issuecomment-277560717zXThese weights reproduce closely the results of the paper using a simple training recipe.)r\   ZrecipeZ_docsc                
   @   s@   e Zd Zedeedd�edddddd	œid
ddœ–d�ZeZdS )r   z>https://download.pytorch.org/models/squeezenet1_0-b66bff10.pthéà   ©Z	crop_size)é   rc   i¨ úImageNet-1Kg²�ï§ÆM@g{®GáT@©zacc@1zacc@5gh‘í|?5ê?gé&1¬@©Zmin_sizeZ
num_paramsZ_metricsZ_opsÚ
_file_size©ÚurlZ
transformsr^   N©	r6   r7   r8   r
   r   r   Ú_COMMON_METAÚIMAGENET1K_V1ÚDEFAULTr-   r-   r-   r.   r   |   s    
þÿõýc                
   @   s@   e Zd Zedeedd�edddddd	œid
ddœ–d�ZeZdS )r   z>https://download.pytorch.org/models/squeezenet1_1-b8a52dc0.pthra   rb   )é   rn   i(Ú rd   gX9´ÈM@g-²�ï'T@re   g¼t“VÖ?gÑ"Ûù~ê@rf   rh   Nrj   r-   r-   r-   r.   r   ‘   s    
þÿõýZ
pretrained)rY   T)rY   rZ   )rY   rZ   r[   r   c                 K   s   t  | ¡} td| |f|ŽS )aÖ  SqueezeNet model architecture from the `SqueezeNet: AlexNet-level
    accuracy with 50x fewer parameters and <0.5MB model size
    <https://arxiv.org/abs/1602.07360>`_ paper.

    Args:
        weights (:class:`~torchvision.models.SqueezeNet1_0_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.SqueezeNet1_0_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.squeezenet.SqueezeNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/squeezenet.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.SqueezeNet1_0_Weights
        :members:
    r<   )r   Úverifyr`   ©rY   rZ   r[   r-   r-   r.   r   ¦   s    
c                 K   s   t  | ¡} td| |f|ŽS )a/  SqueezeNet 1.1 model from the `official SqueezeNet repo
    <https://github.com/DeepScale/SqueezeNet/tree/master/SqueezeNet_v1.1>`_.

    SqueezeNet 1.1 has 2.4x less computation and slightly fewer parameters
    than SqueezeNet 1.0, without sacrificing accuracy.

    Args:
        weights (:class:`~torchvision.models.SqueezeNet1_1_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.SqueezeNet1_1_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.squeezenet.SqueezeNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/squeezenet.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.SqueezeNet1_1_Weights
        :members:
    rL   )r   ro   r`   rp   r-   r-   r.   r   Ã   s    
)$Ú	functoolsr   Útypingr   r   r2   Ztorch.nnr!   Ztorch.nn.initrS   Ztransforms._presetsr   Úutilsr   Z_apir	   r
   r   Ú_metar   Z_utilsr   r   Ú__all__ÚModuler   r   rW   Úboolr`   rk   r   r   rl   r   r   r-   r-   r-   r.   Ú<module>   sX   Aûý ÿ  þ ÿ  þ