
     `i\                        d Z ddlmZmZ ddlZddlmZ ddlm	Z	m
Z
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mZmZmZ d
dlmZ  ej        e          ZdZdZg dZ dZ!dZ" G d dej#        j$                  Z% G d dej#        j$                  Z& G d dej#        j$                  Z' G d dej#        j$                  Z( G d dej#        j$                  Z) G d dej#        j$                  Z* G d dej#        j$                  Z+ G d de          Z,d Z-d!Z.e G d" d#ej#        j$                              Z/ ed$e-           G d% d&e,                      Z0 ed'e-           G d( d)e,e                      Z1g d*Z2dS )+zTensorFlow ResNet model.    )OptionalUnionN   )ACT2FN) TFBaseModelOutputWithNoAttention*TFBaseModelOutputWithPoolingAndNoAttention&TFImageClassifierOutputWithNoAttention)TFPreTrainedModelTFSequenceClassificationLosskeraskeras_serializableunpack_inputs)
shape_list)add_code_sample_docstringsadd_start_docstrings%add_start_docstrings_to_model_forwardlogging   )ResNetConfigr   zmicrosoft/resnet-50)r   i      r   z	tiger catc                        e Zd Z	 	 	 ddededededed	d
f fdZdej        d	ej        fdZddej        de	d	ej        fdZ
ddZ xZS )TFResNetConvLayerr   r   reluin_channelsout_channelskernel_sizestride
activationreturnNc                 r    t                      j        di | |dz  | _        t          j                            |||ddd          | _        t          j                            ddd	          | _        |t          |         nt          j        
                    d
          | _        || _        || _        d S )N   validFconvolution)r   stridespaddinguse_biasnameh㈵>?normalizationepsilonmomentumr'   linear )super__init__	pad_valuer   layersConv2DconvBatchNormalizationr*   r   
Activationr   r   r   )selfr   r   r   r   r   kwargs	__class__s          /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/transformers/models/resnet/modeling_tf_resnet.pyr1   zTFResNetConvLayer.__init__6   s     	""6"""$)L''k67]biv ( 
 
	 #\<<TTW^m<nn0:0F&,,ELLcLcdlLmLm&(    hidden_statec                     | j         | j         fx}}t          j        |d||dg          }|                     |          }|S )N)r   r   )r2   tfpadr5   )r8   r=   
height_pad	width_pads       r;   r#   zTFResNetConvLayer.convolutionJ   sF    "&.$.!AA
YvlVZF,STTyy..r<   Ftrainingc                     |                      |          }|                     ||          }|                     |          }|S NrC   )r#   r*   r   )r8   r=   rC   s      r;   callzTFResNetConvLayer.callQ   sD    ''55)),)JJ|44r<   c                    | j         rd S d| _         t          | dd           Yt          j        | j        j                  5  | j                            d d d | j        g           d d d            n# 1 swxY w Y   t          | dd           \t          j        | j        j                  5  | j                            d d d | j	        g           d d d            d S # 1 swxY w Y   d S d S )NTr5   r*   )
builtgetattrr?   
name_scoper5   r'   buildr   r*   r   r8   input_shapes     r;   rL   zTFResNetConvLayer.buildW   s   : 	F
4&&2ty~.. F F	tT43C DEEEF F F F F F F F F F F F F F F4$//;t1677 P P"(($dD<M)NOOOP P P P P P P P P P P P P P P P P P <;$    $A00A47A4*$CC"C)r   r   r   FN)__name__
__module____qualname__intstrr1   r?   Tensorr#   boolrG   rL   __classcell__r:   s   @r;   r   r   5   s        
  ) )) ) 	)
 ) ) 
) ) ) ) ) )(	 bi      d ry    	P 	P 	P 	P 	P 	P 	P 	Pr<   r   c                   ^     e Zd ZdZdeddf fdZddej        dedej        fd	Z	dd
Z
 xZS )TFResNetEmbeddingszO
    ResNet Embeddings (stem) composed of a single aggressive convolution.
    configr   Nc                      t                      j        d	i | t          |j        |j        dd|j        d          | _        t          j        	                    dddd          | _
        |j        | _        d S )
Nr   r!   embedder)r   r   r   r'   r   r"   pooler)	pool_sizer$   r%   r'   r/   )r0   r1   r   num_channelsembedding_size
hidden_actr_   r   r3   	MaxPool2Dr`   r8   r]   r9   r:   s      r;   r1   zTFResNetEmbeddings.__init__h   s    ""6""")!(
 
 
 l,,q!W[c,dd"/r<   Fpixel_valuesrC   c                 "   t          |          \  }}}}t          j                    r|| j        k    rt	          d          |}|                     |          }t          j        |ddgddgddgddgg          }|                     |          }|S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   r   )r   r?   executing_eagerlyrb   
ValueErrorr_   r@   r`   )r8   rg   rC   _rb   r=   s         r;   rG   zTFResNetEmbeddings.callu   s     *< 8 81a!! 	ld6G&G&Gw   $}}\22vlaVaVaVaV,LMM{{<00r<   c                    | j         rd S d| _         t          | dd           Pt          j        | j        j                  5  | j                            d            d d d            n# 1 swxY w Y   t          | dd           St          j        | j        j                  5  | j                            d            d d d            d S # 1 swxY w Y   d S d S )NTr_   r`   )rI   rJ   r?   rK   r_   r'   rL   r`   rM   s     r;   rL   zTFResNetEmbeddings.build   sS   : 	F
4T**6t}122 * *##D)))* * * * * * * * * * * * * * *44((4t{/00 ( (!!$'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 54$    A''A+.A+!C		CCrP   rQ   )rR   rS   rT   __doc__r   r1   r?   rW   rX   rG   rL   rY   rZ   s   @r;   r\   r\   c   s         0| 0$ 0 0 0 0 0 0
 
 
d 
ry 
 
 
 
	( 	( 	( 	( 	( 	( 	( 	(r<   r\   c            	       h     e Zd ZdZddedededdf fdZdd
ej        dedej        fdZ	ddZ
 xZS )TFResNetShortCutz
    ResNet shortcut, used to project the residual features to the correct size. If needed, it is also used to
    downsample the input using `stride=2`.
    r!   r   r   r   r   Nc                      t                      j        d	i | t          j                            |d|dd          | _        t          j                            ddd          | _        || _        || _	        d S )
Nr   Fr#   )r   r$   r&   r'   r(   r)   r*   r+   r/   )
r0   r1   r   r3   r4   r#   r6   r*   r   r   )r8   r   r   r   r9   r:   s        r;   r1   zTFResNetShortCut.__init__   s    ""6""" <..a%m / 
 
 #\<<TTW^m<nn&(r<   FxrC   c                 b    |}|                      |          }|                     ||          }|S rE   )r#   r*   )r8   rr   rC   r=   s       r;   rG   zTFResNetShortCut.call   s8    ''55)),)JJr<   c                    | j         rd S d| _         t          | dd           Yt          j        | j        j                  5  | j                            d d d | j        g           d d d            n# 1 swxY w Y   t          | dd           \t          j        | j        j                  5  | j                            d d d | j	        g           d d d            d S # 1 swxY w Y   d S d S )NTr#   r*   )
rI   rJ   r?   rK   r#   r'   rL   r   r*   r   rM   s     r;   rL   zTFResNetShortCut.build   s   : 	F
4--9t/455 M M &&dD$:J'KLLLM M M M M M M M M M M M M M M4$//;t1677 P P"(($dD<M)NOOOP P P P P P P P P P P P P P P P P P <;rO   )r!   rP   rQ   )rR   rS   rT   rn   rU   r1   r?   rW   rX   rG   rL   rY   rZ   s   @r;   rp   rp      s         
) )C )s )C )Z^ ) ) ) ) ) ) bi 4 BI    	P 	P 	P 	P 	P 	P 	P 	Pr<   rp   c                   n     e Zd ZdZ	 ddededededd	f
 fd
Zddej        de	dej        fdZ
ddZ xZS )TFResNetBasicLayerzO
    A classic ResNet's residual layer composed by two `3x3` convolutions.
    r   r   r   r   r   r   r   Nc                 L    t                      j        d	i | ||k    p|dk    }t          |||d          | _        t          ||d d          | _        |rt          |||d          n t          j                            dd          | _	        t          |         | _        d S )
Nr   layer.0r   r'   layer.1r   r'   shortcutr.   r'   r/   )r0   r1   r   conv1conv2rp   r   r3   r7   r|   r   r   )r8   r   r   r   r   r9   should_apply_shortcutr:   s          r;   r1   zTFResNetBasicLayer.__init__   s     	""6""" +| ; Jv{&{LV_```
&|\dYbccc
 %D[,vJWWWW((
(CC 	
 !,r<   Fr=   rC   c                     |}|                      ||          }|                     ||          }|                     ||          }||z  }|                     |          }|S rE   )r~   r   r|   r   r8   r=   rC   residuals       r;   rG   zTFResNetBasicLayer.call   sg    zz,zBBzz,zBB==H=== |44r<   c                 r   | j         rd S d| _         t          | dd           Pt          j        | j        j                  5  | j                            d            d d d            n# 1 swxY w Y   t          | dd           Pt          j        | j        j                  5  | j                            d            d d d            n# 1 swxY w Y   t          | dd           St          j        | j        j                  5  | j                            d            d d d            d S # 1 swxY w Y   d S d S )NTr~   r   r|   )	rI   rJ   r?   rK   r~   r'   rL   r   r|   rM   s     r;   rL   zTFResNetBasicLayer.build   s   : 	F
4$''3tz// ' '
  &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '4$''3tz// ' '
  &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '4T**6t}122 * *##D)))* * * * * * * * * * * * * * * * * * 76s6    A''A+.A+!CCCD**D.1D.)r   r   rP   rQ   rR   rS   rT   rn   rU   rV   r1   r?   rW   rX   rG   rL   rY   rZ   s   @r;   rv   rv      s         
 W]- --.1-;>-PS-	- - - - - -  d ry    * * * * * * * *r<   rv   c                   v     e Zd ZdZ	 	 	 ddedededed	ed
df fdZddej        de	d
ej        fdZ
ddZ xZS )TFResNetBottleNeckLayera%  
    A classic ResNet's bottleneck layer composed by three `3x3` convolutions.

    The first `1x1` convolution reduces the input by a factor of `reduction` in order to make the second `3x3`
    convolution faster. The last `1x1` convolution remaps the reduced features to `out_channels`.
    r   r      r   r   r   r   	reductionr   Nc                     t                      j        di | ||k    p|dk    }||z  }t          ||dd          | _        t          |||d          | _        t          ||dd d          | _        |rt          |||d          n t          j        	                    d	d
          | _
        t          |         | _        d S )Nr   rx   )r   r'   rz   ry   zlayer.2)r   r   r'   r|   r.   r}   r/   )r0   r1   r   conv0r~   r   rp   r   r3   r7   r|   r   r   )
r8   r   r   r   r   r   r9   r   reduces_channelsr:   s
            r;   r1   z TFResNetBottleNeckLayer.__init__   s     	""6""" +| ; Jv{'94&{4DRSZcddd
&'79IRX_hiii
&'7STaeluvvv
 %D[,vJWWWW((
(CC 	
 !,r<   Fr=   rC   c                     |}|                      ||          }|                     ||          }|                     ||          }|                     ||          }||z  }|                     |          }|S rE   )r   r~   r   r|   r   r   s       r;   rG   zTFResNetBottleNeckLayer.call   s|    zz,zBBzz,zBBzz,zBB==H=== |44r<   c                 4   | j         rd S d| _         t          | dd           Pt          j        | j        j                  5  | j                            d            d d d            n# 1 swxY w Y   t          | dd           Pt          j        | j        j                  5  | j                            d            d d d            n# 1 swxY w Y   t          | dd           Pt          j        | j        j                  5  | j                            d            d d d            n# 1 swxY w Y   t          | dd           St          j        | j	        j                  5  | j	                            d            d d d            d S # 1 swxY w Y   d S d S )NTr   r~   r   r|   )
rI   rJ   r?   rK   r   r'   rL   r~   r   r|   rM   s     r;   rL   zTFResNetBottleNeckLayer.build  st   : 	F
4$''3tz// ' '
  &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '4$''3tz// ' '
  &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '4$''3tz// ' '
  &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '4T**6t}122 * *##D)))* * * * * * * * * * * * * * * * * * 76sH    A''A+.A+!CCCD))D-0D-#FFF)r   r   r   rP   rQ   r   rZ   s   @r;   r   r      s           - -- - 	-
 - - 
- - - - - -,  d ry    * * * * * * * *r<   r   c                   r     e Zd ZdZ	 ddedededededd	f fd
Zddej        de	dej        fdZ
ddZ xZS )TFResNetStagez4
    A ResNet stage composed of stacked layers.
    r!   r]   r   r   r   depthr   Nc                      t                      j        di | j        dk    rt          nt           ||j        d          g}|fdt          |dz
            D             z  }|| _        d S )N
bottleneckzlayers.0)r   r   r'   c           
      D    g | ]} j         d |dz              S )zlayers.r   r{   )rd   ).0ir]   layerr   s     r;   
<listcomp>z*TFResNetStage.__init__.<locals>.<listcomp>!  sO     
 
 
 E,9JQb[\_`[`QbQbccc
 
 
r<   r   r/   )r0   r1   
layer_typer   rv   rd   rangestage_layers)
r8   r]   r   r   r   r   r9   r3   r   r:   s
    ` `    @r;   r1   zTFResNetStage.__init__  s     	""6"""+1+<+L+L''Rd%\&VM^eopppq 
 
 
 
 
 
519%%
 
 
 	
 #r<   Fr=   rC   c                 4    | j         D ]} |||          }|S rE   )r   )r8   r=   rC   r   s       r;   rG   zTFResNetStage.call'  s2    & 	B 	BE 5AAALLr<   c                     | j         rd S d| _         t          | dd           P| j        D ]J}t          j        |j                  5  |                    d            d d d            n# 1 swxY w Y   Id S d S )NTr   )rI   rJ   r   r?   rK   r'   rL   r8   rN   r   s      r;   rL   zTFResNetStage.build,  s    : 	F
4..:* & &]5:.. & &KK%%%& & & & & & & & & & & & & & & ;:& &   A&&A*	-A*	)r!   r!   rP   rQ   )rR   rS   rT   rn   r   rU   r1   r?   rW   rX   rG   rL   rY   rZ   s   @r;   r   r     s         
 hi# #"#14#DG#QT#ad#	# # # # # #  d ry    
& & & & & & & &r<   r   c                   ^     e Zd Zdeddf fdZ	 	 	 ddej        ded	ed
edef
dZ	ddZ
 xZS )TFResNetEncoderr]   r   Nc                     t                      j        di | t          ||j        |j        d         |j        rdnd|j        d         d          g| _        t          t          |j        |j        dd          |j        dd                              D ];\  }\  }}}| j        
                    t          ||||d|dz                         <d S )	Nr   r!   r   zstages.0)r   r   r'   zstages.)r   r'   r/   )r0   r1   r   rc   hidden_sizesdownsample_in_first_stagedepthsstages	enumeratezipappend)r8   r]   r9   r   r   r   r   r:   s          r;   r1   zTFResNetEncoder.__init__7  s
   ""6""" %#A&"<Cqq!mA&  	
 6?#V%8%<fmABB>OPP6
 6
 	v 	v1A1\5 K}V[,V[bslmpqlqbsbstttuuuu	v 	vr<   FTr=   output_hidden_statesreturn_dictrC   c                     |rdnd }| j         D ]}|r||fz   } |||          }|r||fz   }|st          d ||fD                       S t          ||          S )Nr/   rF   c              3      K   | ]}||V  	d S rQ   r/   )r   vs     r;   	<genexpr>z'TFResNetEncoder.call.<locals>.<genexpr>\  s"      SSqQ]]]]]SSr<   )last_hidden_statehidden_states)r   tupler   )r8   r=   r   r   rC   r   stage_modules          r;   rG   zTFResNetEncoder.callI  s     3< K 	I 	IL# @ - ?'<xHHHLL 	<)\O;M 	TSS\=$ASSSSSS/,^kllllr<   c                     | j         rd S d| _         t          | dd           P| j        D ]J}t          j        |j                  5  |                    d            d d d            n# 1 swxY w Y   Id S d S )NTr   )rI   rJ   r   r?   rK   r'   rL   r   s      r;   rL   zTFResNetEncoder.build`  s    : 	F
44((4 & &]5:.. & &KK%%%& & & & & & & & & & & & & & & 54& &r   )FTFrQ   )rR   rS   rT   r   r1   r?   rW   rX   r   rG   rL   rY   rZ   s   @r;   r   r   6  s        v| v$ v v v v v v* &+ m mim #m 	m
 m 
*m m m m.& & & & & & & &r<   r   c                   4    e Zd ZdZeZdZdZed             Z	dS )TFResNetPreTrainedModelz
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    resnetrg   c                 b    dt          j        d | j        j        ddft           j                  iS )Nrg      )shapedtype)r?   
TensorSpecr]   rb   float32)r8   s    r;   input_signaturez'TFResNetPreTrainedModel.input_signaturet  s0    T4;;SUXZ]4^fhfp q q qrrr<   N)
rR   rS   rT   rn   r   config_classbase_model_prefixmain_input_namepropertyr   r/   r<   r;   r   r   j  sN         
  L $Os s Xs s sr<   r   ad  
    This model is a TensorFlow
    [keras.layers.Layer](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Layer) sub-class. Use it as a
    regular TensorFlow Module and refer to the TensorFlow documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`ResNetConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~TFPreTrainedModel.from_pretrained`] method to load the model weights.
a>  
    Args:
        pixel_values (`tf.Tensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See
            [`ConvNextImageProcessor.__call__`] for details.

        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
c                        e Zd ZeZdeddf fdZe	 	 	 ddej        de	e
         de	e
         d	e
deeej                 ef         f
d
            ZddZ xZS )TFResNetMainLayerr]   r   Nc                      t                      j        di | || _        t          |d          | _        t          |d          | _        t          j        	                    d          | _
        d S )Nr_   r}   encoderT)keepdimsr/   )r0   r1   r]   r\   r_   r   r   r   r3   GlobalAveragePooling2Dr`   rf   s      r;   r1   zTFResNetMainLayer.__init__  sm    ""6"""*6
CCC&vI>>>l9949HHr<   Frg   r   r   rC   c                    ||n| j         j        }||n| j         j        }t          j        |g d          }|                     ||          }|                     ||||          }|d         }|                     |          }t          j        |d          }t          j        |d          }d}	|dd          D ]}
|	t          d	 |
D                       z   }	|s||f|	z   S |r|	nd }	t          |||	
          S )N)r   r!   r   r   )permrF   r   r   rC   r   r   r   r   r!   r/   r   c              3   @   K   | ]}t          j        |d           V  dS )r   N)r?   	transpose)r   hs     r;   r   z)TFResNetMainLayer.call.<locals>.<genexpr>  s/      1f1fTU",q,2O2O1f1f1f1f1f1fr<   )r   pooler_outputr   )
r]   r   use_return_dictr?   r   r_   r   r`   r   r   )r8   rg   r   r   rC   embedding_outputencoder_outputsr   pooled_outputr   r=   s              r;   rG   zTFResNetMainLayer.call  sT    %9$D  $+Jj 	 &1%<kk$+B]
 |L|||DDD===II,,3GU`ks ' 
 
 ,A.$566 L):LII]LAA+ABB/ 	g 	gL)E1f1fYe1f1f1f,f,ffMM 	F%}5EE)=G49/''
 
 
 	
r<   c                    | j         rd S d| _         t          | dd           Pt          j        | j        j                  5  | j                            d            d d d            n# 1 swxY w Y   t          | dd           St          j        | j        j                  5  | j                            d            d d d            d S # 1 swxY w Y   d S d S )NTr_   r   )rI   rJ   r?   rK   r_   r'   rL   r   rM   s     r;   rL   zTFResNetMainLayer.build  sS   : 	F
4T**6t}122 * *##D)))* * * * * * * * * * * * * * *4D))5t|011 ) )""4((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 65rm   NNFrQ   )rR   rS   rT   r   r   r1   r   r?   rW   r   rX   r   r   r   rG   rL   rY   rZ   s   @r;   r   r     s        LI| I$ I I I I I I  04&*+
 +
i+
 'tn+
 d^	+

 +
 
uRY!KK	L+
 +
 +
 ]+
Z	) 	) 	) 	) 	) 	) 	) 	)r<   r   zOThe bare ResNet model outputting raw features without any specific head on top.c                        e Zd Zdeddf fdZ ee           eee	e
de          e	 	 	 ddej        d	ee         d
ee         dedeeej                 e	f         f
d                                    ZddZ xZS )TFResNetModelr]   r   Nc                 h     t                      j        |fi | t          |d          | _        d S )Nr   )r]   r'   )r0   r1   r   r   rf   s      r;   r1   zTFResNetModel.__init__  s:    **6***'vHEEEr<   vision)
checkpointoutput_typer   modalityexpected_outputFrg   r   r   rC   c                 x    ||n| j         j        }||n| j         j        }|                     ||||          }|S )N)rg   r   r   rC   )r]   r   r   r   )r8   rg   r   r   rC   resnet_outputss         r;   rG   zTFResNetModel.call  s]    " %9$D  $+Jj 	 &1%<kk$+B]%!5#	 % 
 
 r<   c                     | j         rd S d| _         t          | dd           St          j        | j        j                  5  | j                            d            d d d            d S # 1 swxY w Y   d S d S )NTr   )rI   rJ   r?   rK   r   r'   rL   rM   s     r;   rL   zTFResNetModel.build  s    : 	F
44((4t{/00 ( (!!$'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 54s    A((A,/A,r   rQ   )rR   rS   rT   r   r1   r   RESNET_INPUTS_DOCSTRINGr   _CHECKPOINT_FOR_DOCr   _CONFIG_FOR_DOC_EXPECTED_OUTPUT_SHAPEr   r?   rW   r   rX   r   r   rG   rL   rY   rZ   s   @r;   r   r     s+       
F| F$ F F F F F F +*+BCC&>$.    04&* i 'tn d^	
  
uRY!KK	L   ]  DC(( ( ( ( ( ( ( (r<   r   z
    ResNet Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    c                   F    e Zd Zdeddf fdZdej        dej        fdZ ee	           e
eeee          e	 	 	 	 	 dd	eej                 d
eej                 dee         dee         dedeeej                 ef         fd                                    ZddZ xZS )TFResNetForImageClassificationr]   r   Nc                 <    t                      j        |fi | |j        | _        t          |d          | _        |j        dk    r&t
          j                            |j        d          n t
          j                            dd          | _	        || _
        d S )Nr   r}   r   zclassifier.1r.   )r0   r1   
num_labelsr   r   r   r3   Denser7   classifier_layerr]   rf   s      r;   r1   z'TFResNetForImageClassification.__init__  s    **6*** +'X>>>  1$$ Lv0~FFF(((GG 	
 r<   rr   c                 |    t          j                                        |          }|                     |          }|S rQ   )r   r3   Flattenr   )r8   rr   logitss      r;   
classifierz)TFResNetForImageClassification.classifier  s5    L  ""1%%&&q))r<   )r   r   r   r   Frg   labelsr   r   rC   c                 6   ||n| j         j        }|                     ||||          }|r|j        n|d         }|                     |          }|dn|                     ||          }	|s|f|dd         z   }
|	|	f|
z   n|
S t          |	||j                  S )a)  
        labels (`tf.Tensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
        Nr   r   r!   )lossr   r   )r]   r   r   r   r   hf_compute_lossr	   r   )r8   rg   r   r   r   rC   outputsr   r   r   outputs              r;   rG   z#TFResNetForImageClassification.call!  s    * &1%<kk$+B]++/CQ\go  
 
 2=L--'!*//~tt4+?+?+O+O 	DY,F'+'7D7V##VC54^e^sttttr<   c                    | j         rd S d| _         t          | dd           Pt          j        | j        j                  5  | j                            d            d d d            n# 1 swxY w Y   t          | dd           ft          j        | j        j                  5  | j                            d d | j        j	        d         g           d d d            d S # 1 swxY w Y   d S d S )NTr   r   )
rI   rJ   r?   rK   r   r'   rL   r   r]   r   rM   s     r;   rL   z$TFResNetForImageClassification.buildH  s|   : 	F
44((4t{/00 ( (!!$'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (4+T22>t49:: X X%++T49QRT9U,VWWWX X X X X X X X X X X X X X X X X X ?>s$    A''A+.A+!.CC #C )NNNNFrQ   )rR   rS   rT   r   r1   r?   rW   r   r   r   r   _IMAGE_CLASS_CHECKPOINTr	   r   _IMAGE_CLASS_EXPECTED_OUTPUTr   r   rX   r   r   rG   rL   rY   rZ   s   @r;   r   r     su       
| 
$ 
 
 
 
 
 
BI ")    
 +*+BCC*:$4	    -1&*/3&*u ury)u #u 'tn	u
 d^u u 
uRY!GG	Hu u u ]  DCu>	X 	X 	X 	X 	X 	X 	X 	Xr<   r   )r   r   r   )3rn   typingr   r   
tensorflowr?   activations_tfr   modeling_tf_outputsr   r   r	   modeling_tf_utilsr
   r   r   r   r   tf_utilsr   utilsr   r   r   r   configuration_resnetr   
get_loggerrR   loggerr   r   r   r   r   r3   Layerr   r\   rp   rv   r   r   r   r   RESNET_START_DOCSTRINGr   r   r   r   __all__r/   r<   r;   <module>r     s     " " " " " " " "     $ $ $ $ $ $         
              # " " " " " u u u u u u u u u u u u . . . . . . 
	H	%	% ! , (  0 * +P +P +P +P +P* +P +P +P\'( '( '( '( '(+ '( '( '(TP P P P Pu|) P P PD(* (* (* (* (*+ (* (* (*V7* 7* 7* 7* 7*el0 7* 7* 7*t& & & & &EL& & & &D1& 1& 1& 1& 1&el( 1& 1& 1&hs s s s s/ s s s
   A) A) A) A) A)* A) A) A)H U (( (( (( (( ((+ (( ((	 ((V   BX BX BX BX BX%<>Z BX BX BXJ Y
X
Xr<   