o
    "j(                     @   s`   d dl Zd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z dd ZG dd	 d	e	ZdS )
    N)base)LayerHelper)	ParamAttr)Layerinitializerc           +      C   sH  t di t }tjjjj}tjjjj}|| j	}|j|dd}|j| j	dd}|j|dd}|j|dd} |}!|}"|j| j	dd}#|j|dd}$|j|dd}%|
d u r\|j|ddn|
}&|d u ri|j|ddn|}'| |||||||||	|
|d}(|||||||||||||d})||||| |!|"|#|$|%|&|'d}*|j
d|(|*|)d |S )	Nresnet_unitT)dtypestop_gradient)XZFilterXZScaleXZBiasXZMeanXZVarXZZFilterZZScaleZZBiasZZMeanZZVarZ)stridestride_zpaddingdilationgroupmomentumepsilondata_formatfuse_addhas_shortcutuse_global_statsis_testZact_type)YZBitMaskZConvXZ
SavedMeanXZSavedInvstdXZRunningMeanXZRunningVarXZConvZZ
SavedMeanZZSavedInvstdZZRunningMeanZZRunningVarZ)typeinputsoutputsattrs)r   )r   localsr   coreVarDescVarTypeFP32ZINT32Z"create_variable_for_type_inferencer   Z	append_op)+xfilter_xscale_xbias_xmean_xvar_xzfilter_zscale_zbias_zmean_zvar_zr   r   r   r   groupsr   epsr   r   r   r   r   acthelperbn_param_dtypeZbit_mask_dtypeoutZbit_maskZconv_xZsaved_mean_xZsaved_invstd_xZrunning_mean_xZrunning_var_xZconv_zZsaved_mean_zZsaved_invstd_zZrunning_mean_zZrunning_var_zr   r   r    r4   f/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/incubate/operators/resnet_unit.pyr      s   	r   c                       sV   e Zd ZdZ																					d fd	d
	ZdddZ  ZS )
ResNetUnitzv
    ******Temporary version******.
    ResNetUnit is designed for optimize the performence by using cudnnv8 API.
       ?h㈵>NHWCreluFNc                     s\  t    | _| _d _tj|dd _|d d  _	d _
| _| _| _| _|	 _|
 _| _| _ddh}||vrItd|| fdd}|dk}tjjjj}|snddd|g}||||g}||||g}nd|ddg}||||g}||||g} j||||d	 _ j|||td
d _ j|||dd _ jt |tddd||d _!d j!_" jt |td
dd||d _#d j#_"|
r j||||d	 _$ j|||td
d _% j|||dd _& jt |tddd||d _'d j'_" jt |td
dd||d _(d j(_"d S d  _$d  _%d  _&d  _'d  _(d S )Nr7      Zkernel_sizer:   ZNCHWz7conv_format must be one of {}, but got conv_format='{}'c                    s(   t  j|  }d| d }td|S )Ng       @g      ?        )npprod_kernel_sizeIZNormal)ZchannelsZfilter_elem_numZstdselfr4   r5   _get_default_param_initializer   s   z;ResNetUnit.__init__.<locals>._get_default_param_initializer)shapeattrdefault_initializerg      ?)rE   rF   r   rG   T)rE   rF   r   Zis_biasr=   F)namer   Z	trainable)rF   rE   r   ))super__init___stride	_stride_z	_dilationpaddleutilsZconvert_to_listr@   _padding_groups	_momentum_eps_data_format_act	_fuse_add_has_shortcut_use_global_stats_is_test
ValueErrorformatr   r   r   r    r!   Zcreate_parameterr#   rA   Constantr$   r%   r   r&   r	   r'   r)   r*   r+   r,   r-   ) rC   Znum_channels_xZnum_filtersZfilter_sizer   r   r/   r   r0   r   r   r   r   Zfilter_x_attrZscale_x_attrZbias_x_attrZmoving_mean_x_nameZmoving_var_x_nameZnum_channels_zr   Zfilter_z_attrZscale_z_attrZbias_z_attrZmoving_mean_z_nameZmoving_var_z_nameZvalid_formatrD   Zis_nchwr2   Zbn_param_shapeZfilter_x_shapeZfilter_z_shape	__class__rB   r5   rJ      s  
				
zResNetUnit.__init__c                 C   s   | j r|d u rtdt|| j| j| j| j| j|| j| j	| j
| j| j| j| j| j| j| j| j| j| j| j | j| j| j| j}|S )Nzz can not be None)rV   rZ   r   r#   r$   r%   r&   r'   r)   r*   r+   r,   r-   rK   rL   rP   rM   rQ   rR   rS   rT   rW   rX   rY   rU   )rC   r"   r(   r3   r4   r4   r5   forwardL  s<   zResNetUnit.forward)r7   r8   r9   r:   r;   FFFFNNNNNr7   r7   NNNNN)N)__name__
__module____qualname____doc__rJ   r_   __classcell__r4   r4   r]   r5   r6      s4    
 0r6   )numpyr>   rN   r   Zpaddle.base.layer_helperr   Zpaddle.base.param_attrr   Z	paddle.nnr   r   rA   r   r6   r4   r4   r4   r5   <module>   s   |