
    cCi\                     F   S r SSKJrJr  SSKrSSKJr  SSKJ	r	J
r
Jr  SSKJrJrJrJrJr  SSKJr  SS	KJrJrJrJr  S
SKJr  \R6                  " \5      rSrSr/ SQr Sr!Sr" " S S\RF                  RH                  5      r% " S S\RF                  RH                  5      r& " S S\RF                  RH                  5      r' " S S\RF                  RH                  5      r( " S S\RF                  RH                  5      r) " S S\RF                  RH                  5      r* " S S\RF                  RH                  5      r+ " S S\5      r,S r-S!r.\ " S" S#\RF                  RH                  5      5       r/\" S$\-5       " S% S&\,5      5       r0\" S'\-5       " S( S)\,\5      5       r1/ S*Qr2g)+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                      ^  \ rS rSr   SS\S\S\S\S\SS4U 4S	 jjjrS
\R                  S\R                  4S jr	SS
\R                  S\
S\R                  4S jjrSS jrSrU =r$ )TFResNetConvLayer5   in_channelsout_channelskernel_sizestride
activationreturnNc           	      F  > [         TU ]  " S0 UD6  US-  U l        [        R                  R                  X#USSSS9U l        [        R                  R                  SSSS	9U l        Ub	  [        U   O[        R                  R                  S
5      U l        Xl        X l        g )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          g/home/james-whalen/.local/lib/python3.13/site-packages/transformers/models/resnet/modeling_tf_resnet.pyr1   TFResNetConvLayer.__init__6   s     	"6"$)LL''67]biv ( 
	 #\\<<TTW^m<n0:0F&,ELLLcLcdlLm&(    hidden_statec                     U R                   U R                   4=p#[        R                  " USX#S/5      nU R                  U5      nU$ )N)r   r   )r2   tfpadr5   )r8   r>   
height_pad	width_pads       r;   r#   TFResNetConvLayer.convolutionJ   sB    "&..$..!AA
vvlVZF,STyy.r=   trainingc                 h    U R                  U5      nU R                  XS9nU R                  U5      nU$ NrE   )r#   r*   r   )r8   r>   rE   s      r;   callTFResNetConvLayer.callQ   s9    ''5)),)J|4r=   c                 $   U R                   (       a  g SU l         [        U SS 5      b\  [        R                  " U R                  R
                  5         U R                  R                  S S S U R                  /5        S S S 5        [        U SS 5      b]  [        R                  " U R                  R
                  5         U R                  R                  S S S U R                  /5        S S S 5        g g ! , (       d  f       Nz= f! , (       d  f       g = f)NTr5   r*   )
builtgetattrr@   
name_scoper5   r'   buildr   r*   r   r8   input_shapes     r;   rO   TFResNetConvLayer.buildW   s    ::
4&2tyy~~.		tT43C3C DE /4$/;t11667""(($dD<M<M)NO 87 < /. 87   *C0<*D0
C>
D)r   rL   r5   r   r*   r   r2   )r   r   reluFN)__name__
__module____qualname____firstlineno__intstrr1   r@   Tensorr#   boolrI   rO   __static_attributes____classcell__r:   s   @r;   r   r   5   s    
  )) ) 	)
 ) ) 
) )(		 bii  d ryy 	P 	Pr=   r   c                      ^  \ rS rSrSrS\SS4U 4S jjrSS\R                  S\	S\R                  4S	 jjr
SS
 jrSrU =r$ )TFResNetEmbeddingsc   zG
ResNet Embeddings (stem) composed of a single aggressive convolution.
configr   Nc           	         > [         TU ]  " S	0 UD6  [        UR                  UR                  SSUR
                  SS9U l        [        R                  R                  SSSSS9U l
        UR                  U l        g )
Nr   r!   embedder)r   r   r   r'   r   r"   pooler)	pool_sizer$   r%   r'   r/   )r0   r1   r   num_channelsembedding_size
hidden_actrg   r   r3   	MaxPool2Drh   r8   re   r9   r:   s      r;   r1   TFResNetEmbeddings.__init__h   ss    "6")!!((
 ll,,q!W[c,d"//r=   pixel_valuesrE   c                    [        U5      u      p4[        R                  " 5       (       a  X@R                  :w  a  [	        S5      eUnU R                  U5      n[        R                  " USS/SS/SS/SS//5      nU R                  U5      nU$ )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   r   )r   r@   executing_eagerlyrj   
ValueErrorrg   rA   rh   )r8   rp   rE   _rj   r>   s         r;   rI   TFResNetEmbeddings.callu   s     *< 81a!!l6G6G&Gw  $}}\2vvlaVaVaVaV,LM{{<0r=   c                    U R                   (       a  g SU l         [        U SS 5      bN  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        [        U SS 5      bO  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        g g ! , (       d  f       Nl= f! , (       d  f       g = f)NTrg   rh   )rL   rM   r@   rN   rg   r'   rO   rh   rP   s     r;   rO   TFResNetEmbeddings.build   s    ::
4T*6t}}112##D) 344(4t{{//0!!$' 10 5 32 10   C.C%
C"%
C3)rL   rg   rj   rh   rU   rV   )rW   rX   rY   rZ   __doc__r   r1   r@   r]   r^   rI   rO   r_   r`   ra   s   @r;   rc   rc   c   sG    0| 0$ 0
 
d 
ryy 
	( 	(r=   rc   c            	          ^  \ rS rSrSrSS\S\S\SS4U 4S jjjrSS	\R                  S
\	S\R                  4S jjr
SS jrSrU =r$ )TFResNetShortCut   z
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   Nc                    > [         TU ]  " S	0 UD6  [        R                  R	                  USUSSS9U l        [        R                  R                  SSSS9U l        Xl        X l	        g )
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   TFResNetShortCut.__init__   sh    "6" <<..a%m / 
 #\\<<TTW^m<n&(r=   xrE   c                 J    UnU R                  U5      nU R                  X2S9nU$ rG   )r#   r*   )r8   r   rE   r>   s       r;   rI   TFResNetShortCut.call   s0    ''5)),)Jr=   c                 $   U R                   (       a  g SU l         [        U SS 5      b\  [        R                  " U R                  R
                  5         U R                  R                  S S S U R                  /5        S S S 5        [        U SS 5      b]  [        R                  " U R                  R
                  5         U R                  R                  S S S U R                  /5        S S S 5        g g ! , (       d  f       Nz= f! , (       d  f       g = f)NTr#   r*   )
rL   rM   r@   rN   r#   r'   rO   r   r*   r   rP   s     r;   rO   TFResNetShortCut.build   s    ::
4-9t//445  &&dD$:J:J'KL 64$/;t11667""(($dD<M<M)NO 87 < 65 87rS   )rL   r#   r   r*   r   )r!   rU   rV   )rW   rX   rY   rZ   ry   r[   r1   r@   r]   r^   rI   rO   r_   r`   ra   s   @r;   r{   r{      s]    
)C )s )C )Z^ ) )bii 4 BII 	P 	Pr=   r{   c                      ^  \ rS rSrSr SS\S\S\S\SS4
U 4S	 jjjrSS
\R                  S\
S\R                  4S jjrSS jrSrU =r$ )TFResNetBasicLayer   zG
A classic ResNet's residual layer composed by two `3x3` convolutions.
r   r   r   r   r   Nc                   > [         TU ]  " S	0 UD6  X:g  =(       d    US:g  n[        XUSS9U l        [        X"S SS9U l        U(       a  [        XUSS9O[        R                  R                  SSS9U l	        [        U   U l        g )
Nr   layer.0r   r'   layer.1r   r'   shortcutr.   r'   r/   )r0   r1   r   conv1conv2r{   r   r3   r7   r   r   r   )r8   r   r   r   r   r9   should_apply_shortcutr:   s          r;   r1   TFResNetBasicLayer.__init__   s     	"6" + ; Jv{&{V_`
&|dYbc
 % [vJW((
(C 	
 !,r=   r>   rE   c                     UnU R                  XS9nU R                  XS9nU R                  X2S9nX-  nU R                  U5      nU$ rG   )r   r   r   r   r8   r>   rE   residuals       r;   rI   TFResNetBasicLayer.call   sS    zz,zBzz,zB==== |4r=   c                    U R                   (       a  g SU l         [        U SS 5      bN  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        [        U SS 5      bN  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        [        U SS 5      bO  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        g g ! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       g = f)NTr   r   r   )	rL   rM   r@   rN   r   r'   rO   r   r   rP   s     r;   rO   TFResNetBasicLayer.build   s    ::
4$'3tzz/

  & 04$'3tzz/

  & 04T*6t}}112##D) 32 7 0/ 0/ 32s$   D0.E
E0
D>
E
E )r   rL   r   r   r   )r   rT   rU   rV   rW   rX   rY   rZ   ry   r[   r\   r1   r@   r]   r^   rI   rO   r_   r`   ra   s   @r;   r   r      sm    
 W]--.1-;>-PS-	- - d ryy * *r=   r   c                      ^  \ rS rSrSr   SS\S\S\S\S\SS	4U 4S
 jjjrSS\R                  S\
S\R                  4S jjrSS jrSrU =r$ )TFResNetBottleNeckLayer   a  
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   	reductionr   Nc                 6  > [         T	U ]  " S0 UD6  X:g  =(       d    US:g  nX%-  n[        XSSS9U l        [        XUSS9U l        [        XSS SS9U l        U(       a  [        XUSS9O[        R                  R                  S	SS
9U l
        [        U   U l        g )Nr   r   )r   r'   r   r   zlayer.2)r   r   r'   r   r.   r   r/   )r0   r1   r   conv0r   r   r{   r   r3   r7   r   r   r   )
r8   r   r   r   r   r   r9   r   reduces_channelsr:   s
            r;   r1    TFResNetBottleNeckLayer.__init__   s     	"6" + ; Jv{'4&{RSZcd
&'7RX_hi
&'7STaeluv
 % [vJW((
(C 	
 !,r=   r>   rE   c                     UnU R                  XS9nU R                  XS9nU R                  XS9nU R                  X2S9nX-  nU R	                  U5      nU$ rG   )r   r   r   r   r   r   s       r;   rI   TFResNetBottleNeckLayer.call   sc    zz,zBzz,zBzz,zB==== |4r=   c                    U R                   (       a  g SU l         [        U SS 5      bN  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        [        U SS 5      bN  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        [        U SS 5      bN  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        [        U SS 5      bO  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        g g ! , (       d  f       GN%= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)NTr   r   r   r   )
rL   rM   r@   rN   r   r'   rO   r   r   r   rP   s     r;   rO   TFResNetBottleNeckLayer.build  s)   ::
4$'3tzz/

  & 04$'3tzz/

  & 04$'3tzz/

  & 04T*6t}}112##D) 32 7 0/ 0/ 0/ 32s0   F.F
F/&G 
F
F,/
F= 
G)r   rL   r   r   r   r   )r   rT      rU   rV   r   ra   s   @r;   r   r      s      -- - 	-
 - - 
- -, d ryy * *r=   r   c                      ^  \ rS rSrSr SS\S\S\S\S\SS	4U 4S
 jjjrSS\R                  S\
S\R                  4S jjrSS jrSrU =r$ )TFResNetStagei  z,
A ResNet stage composed of stacked layers.
re   r   r   r   depthr   Nc                 
  > [         T
U ]  " S0 UD6  UR                  S:X  a  [        O[        nU" X#XAR
                  SS9/nU[        US-
  5       V	s/ s H  n	U" X3UR
                  SU	S-    3S9PM     sn	-  nXl        g s  sn	f )N
bottleneckzlayers.0)r   r   r'   r   zlayers.r   r/   )r0   r1   
layer_typer   r   rl   rangestage_layers)r8   re   r   r   r   r   r9   layerr3   ir:   s             r;   r1   TFResNetStage.__init__  s     	"6"+1+<+<+L'Rd&M^M^eopq519%
% ,9J9JSZ[\_`[`ZaQbc%
 	
 #	
s   "B r>   rE   c                 8    U R                    H	  nU" XS9nM     U$ rG   )r   )r8   r>   rE   r   s       r;   rI   TFResNetStage.call'  s"    &&E AL 'r=   c                    U R                   (       a  g SU l         [        U SS 5      bN  U R                   H=  n[        R                  " UR
                  5         UR                  S 5        S S S 5        M?     g g ! , (       d  f       MR  = f)NTr   )rL   rM   r   r@   rN   r'   rO   r8   rQ   r   s      r;   rO   TFResNetStage.build,  sb    ::
4.:**]]5::.KK% /. + ;..   A77
B	)rL   r   )r!   r!   rU   rV   )rW   rX   rY   rZ   ry   r   r[   r1   r@   r]   r^   rI   rO   r_   r`   ra   s   @r;   r   r     su    
 hi#"#14#DG#QT#ad#	# # d ryy 
& &r=   r   c                   z   ^  \ rS rSrS\SS4U 4S jjr   SS\R                  S\S\S	\S\	4
S
 jjr
SS jrSrU =r$ )TFResNetEncoderi6  re   r   Nc                   > [         TU ]  " S0 UD6  [        UUR                  UR                  S   UR
                  (       a  SOSUR                  S   SS9/U l        [        [        UR                  UR                  SS  UR                  SS  5      5       H3  u  nu  pEnU R                  R                  [        XXVSUS-    3S95        M5     g )	Nr   r!   r   zstages.0)r   r   r'   zstages.)r   r'   r/   )r0   r1   r   rk   hidden_sizesdownsample_in_first_stagedepthsstages	enumeratezipappend)r8   re   r9   r   r   r   r   r:   s          r;   r1   TFResNetEncoder.__init__7  s    "6" %%##A&"<<q!mmA&	
 6?##V%8%8%<fmmAB>OP6
1A15 KK}V,dklmpqlqkrbstu6
r=   r>   output_hidden_statesreturn_dictrE   c                     U(       a  SOS nU R                    H  nU(       a  XQ4-   nU" XS9nM     U(       a  XQ4-   nU(       d  [        S X4 5       5      $ [        XS9$ )Nr/   rH   c              3   .   #    U  H  oc  M  Uv   M     g 7frV   r/   ).0vs     r;   	<genexpr>'TFResNetEncoder.call.<locals>.<genexpr>\  s     S$Aq$As   	)last_hidden_statehidden_states)r   tupler   )r8   r>   r   r   rE   r   stage_modules          r;   rI   TFResNetEncoder.callI  sc     3 KKL# - ?'HL	 (  )O;MS\$ASSS/,llr=   c                    U R                   (       a  g SU l         [        U SS 5      bN  U R                   H=  n[        R                  " UR
                  5         UR                  S 5        S S S 5        M?     g g ! , (       d  f       MR  = f)NTr   )rL   rM   r   r@   rN   r'   rO   r   s      r;   rO   TFResNetEncoder.build`  s`    ::
44(4]]5::.KK% /. % 5..r   )rL   r   )FTFrV   )rW   rX   rY   rZ   r   r1   r@   r]   r^   r   rI   rO   r_   r`   ra   s   @r;   r   r   6  sm    v| v$ v* &+ miim #m 	m
 m 
*m.& &r=   r   c                   4    \ rS rSrSr\rSrSr\	S 5       r
Srg)TFResNetPreTrainedModelij  zz
An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
models.
resnetrp   c                 |    S[         R                  " S U R                  R                  SS4[         R                  S90$ )Nrp      )shapedtype)r@   
TensorSpecre   rj   float32)r8   s    r;   input_signature'TFResNetPreTrainedModel.input_signaturet  s4    T4;;;S;SUXZ]4^fhfpfp qrrr=   r/   N)rW   rX   rY   rZ   ry   r   config_classbase_model_prefixmain_input_namepropertyr   r_   r/   r=   r;   r   r   j  s-    
  L $O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                      ^  \ rS rSr\rS\SS4U 4S jjr\   SS\R                  S\
\   S\
\   S	\S\\\R                     \4   4
S
 jj5       rSS jrSrU =r$ )TFResNetMainLayeri  re   r   Nc                    > [         TU ]  " S0 UD6  Xl        [        USS9U l        [        USS9U l        [        R                  R                  SS9U l
        g )Nrg   r   encoderT)keepdimsr/   )r0   r1   re   rc   rg   r   r   r   r3   GlobalAveragePooling2Drh   rn   s      r;   r1   TFResNetMainLayer.__init__  sM    "6"*6
C&vI>ll9949Hr=   rp   r   r   rE   c                    Ub  UOU R                   R                  nUb  UOU R                   R                  n[        R                  " U/ SQS9nU R                  XS9nU R                  XRX4S9nUS   nU R                  U5      n[        R                  " US5      n[        R                  " US5      nSn	USS   H  n
U	[        S	 U
 5       5      -   n	M     U(       d  Xx4U	-   $ U(       a  U	OS n	[        UUU	S
9$ )N)r   r!   r   r   )permrH   r   r   rE   r   r   r   r   r!   r/   r   c              3   P   #    U  H  n[         R                  " US 5      v   M     g7f)r   N)r@   	transpose)r   hs     r;   r   )TFResNetMainLayer.call.<locals>.<genexpr>  s!     1fYeTU",,q,2O2OYes   $&)r   pooler_outputr   )
re   r   use_return_dictr@   r   rg   r   rh   r   r   )r8   rp   r   r   rE   embedding_outputencoder_outputsr   pooled_outputr   r>   s              r;   rI   TFResNetMainLayer.call  s    %9$D $++JjJj 	 &1%<k$++B]B]
 ||L|D===I,,U` ' 
 ,A.$56 LL):LI]LA+AB/L)E1fYe1f,ffM 0 %5EE)=49/''
 	
r=   c                    U R                   (       a  g SU l         [        U SS 5      bN  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        [        U SS 5      bO  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        g g ! , (       d  f       Nl= f! , (       d  f       g = f)NTrg   r   )rL   rM   r@   rN   rg   r'   rO   r   rP   s     r;   rO   TFResNetMainLayer.build  s    ::
4T*6t}}112##D) 34D)5t||001""4( 21 6 32 21rx   )rL   re   rg   r   rh   NNFrV   )rW   rX   rY   rZ   r   r   r1   r   r@   r]   r   r^   r   r   r   rI   rO   r_   r`   ra   s   @r;   r   r     s    LI| I$ I  04&*+
ii+
 'tn+
 d^	+

 +
 
uRYY!KK	L+
 +
Z	) 	)r=   r   zOThe bare ResNet model outputting raw features without any specific head on top.c                      ^  \ rS rSrS\SS4U 4S jjr\" \5      \" \	\
\S\S9\   SS\R                  S	\\   S
\\   S\S\\\R                     \
4   4
S jj5       5       5       rSS jrSrU =r$ )TFResNetModeli  re   r   Nc                 F   > [         TU ]  " U40 UD6  [        USS9U l        g )Nr   )re   r'   )r0   r1   r   r   rn   s      r;   r1   TFResNetModel.__init__  s#    *6*'vHEr=   vision)
checkpointoutput_typer   modalityexpected_outputrp   r   r   rE   c                     Ub  UOU R                   R                  nUb  UOU R                   R                  nU R                  UUUUS9nU$ )N)rp   r   r   rE   )re   r   r   r   )r8   rp   r   r   rE   resnet_outputss         r;   rI   TFResNetModel.call  s]    " %9$D $++JjJj 	 &1%<k$++B]B]%!5#	 % 
 r=   c                    U R                   (       a  g SU l         [        U SS 5      bO  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        g g ! , (       d  f       g = f)NTr   )rL   rM   r@   rN   r   r'   rO   rP   s     r;   rO   TFResNetModel.build  s^    ::
44(4t{{//0!!$' 10 500s   A88
B)rL   r   r   rV   )rW   rX   rY   rZ   r   r1   r   RESNET_INPUTS_DOCSTRINGr   _CHECKPOINT_FOR_DOCr   _CONFIG_FOR_DOC_EXPECTED_OUTPUT_SHAPEr   r@   r]   r   r^   r   r   rI   rO   r_   r`   ra   s   @r;   r   r     s    
F| F$ F ++BC&>$.  04&*ii 'tn d^	
  
uRYY!KK	L  D(( (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                   D  ^  \ rS rSrS\SS4U 4S jjrS\R                  S\R                  4S jr\	" \
5      \" \\\\S9\     SS	\\R                     S
\\R                     S\\   S\\   S\S\\\R                     \4   4S jj5       5       5       rSS jrSrU =r$ )TFResNetForImageClassificationi  re   r   Nc                 *  > [         TU ]  " U40 UD6  UR                  U l        [        USS9U l        UR                  S:  a(  [
        R                  R                  UR                  SS9O[
        R                  R                  SSS9U l	        Xl
        g )Nr   r   r   zclassifier.1r.   )r0   r1   
num_labelsr   r   r   r3   Denser7   classifier_layerre   rn   s      r;   r1   'TFResNetForImageClassification.__init__  s    *6* ++'X>   1$ LLv00~F(((G 	
 r=   r   c                 p    [         R                  R                  5       " U5      nU R                  U5      nU$ rV   )r   r3   Flattenr  )r8   r   logitss      r;   
classifier)TFResNetForImageClassification.classifier  s.    LL  "1%&&q)r=   )r   r   r   r   rp   labelsr   r   rE   c                 4   Ub  UOU R                   R                  nU R                  XXES9nU(       a  UR                  OUS   nU R	                  U5      nUc  SOU R                  X(5      n	U(       d  U4USS -   n
U	b  U	4U
-   $ U
$ [        XUR                  S9$ )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   )re   r   r   r   r  hf_compute_lossr	   r   )r8   rp   r  r   r   rE   outputsr   r  r  outputs              r;   rI   #TFResNetForImageClassification.call!  s    * &1%<k$++B]B]++Q\  
 2=--'!*/~t4+?+?+OY,F'+'7D7V#CVC54^e^s^sttr=   c                     U R                   (       a  g SU l         [        U SS 5      bN  [        R                  " U R                  R
                  5         U R                  R                  S 5        S S S 5        [        U SS 5      bi  [        R                  " U R                  R
                  5         U R                  R                  S S U R                  R                  S   /5        S S S 5        g g ! , (       d  f       N= f! , (       d  f       g = f)NTr   r  )
rL   rM   r@   rN   r   r'   rO   r  re   r   rP   s     r;   rO   $TFResNetForImageClassification.buildH  s    ::
44(4t{{//0!!$' 14+T2>t4499:%%++T49Q9QRT9U,VW ;: ? 10 ;:s   C..6C?.
C<?
D)rL   r  re   r  r   )NNNNFrV   )rW   rX   rY   rZ   r   r1   r@   r]   r  r   r  r   _IMAGE_CLASS_CHECKPOINTr	   r  _IMAGE_CLASS_EXPECTED_OUTPUTr   r   r^   r   r   rI   rO   r_   r`   ra   s   @r;   r  r    s    
| 
$ 
BII ")) 
 ++BC*:$4	  -1&*/3&*uryy)u #u 'tn	u
 d^u u 
uRYY!GG	Hu  Du>	X 	Xr=   r  )r  r   r   )3ry   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_loggerrW   loggerr  r  r	  r   r!  r3   Layerr   rc   r{   r   r   r   r   r   RESNET_START_DOCSTRINGr  r   r   r  __all__r/   r=   r;   <module>r/     s    "  $ 
  # u u . 
		H	% ! , (  0 * +P** +P\'(++ '(TPu||)) PD(*++ (*V7*ell00 7*t&ELL&& &D1&ell(( 1&hs/ s
   A)** A) A)H U((+ ((	((V  BX%<>Z BXBXJ Yr=   