
    ~WhV              	          d Z ddlmc mZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ d
ZdddddddddZda	 	 	 	 	 	 	 	 d:dZd;dZd<dZd=d Zd<d!Z	 	 	 	 	 d>d#Zd?d$Z ed%d&d'          	 	 	 	 	 	 d@d(            Z ed)d*          	 	 	 	 	 	 d@d+            Z ed,d-          	 	 	 	 	 	 d@d.            Z ed/d0          dAd1            Z ed2d3          dBd5            Z ej!        "                    d6ej#        ej$        7          e_         ej         j         e _         d8Z% e&ed9ej         e%z               e&ed9ej         e%z               e&ed9ej         e%z              dS )CzResNet models for Keras.

Reference:
  - [Deep Residual Learning for Image Recognition](
      https://arxiv.org/abs/1512.03385) (CVPR 2015)
    N)backend)imagenet_utils)training)VersionAwareLayers)
data_utils)layer_utils)keras_exportzDhttps://storage.googleapis.com/tensorflow/keras-applications/resnet/) 2cb95161c43110f7111970584f804107 4d473c1dd8becc155b73f8504c6f6626) f1aeb4b969a6efcfb50fad2f0c20cfc5 88cf7a10940856eca736dc7b7e228a21) 100835be76be38e30d865e96f2aaae62 ee4c566cf9a93f14d82f913c2dc6dd0c) 3ef43a0b657b3be2300d5770ece849e0 fac2f116257151a9d068a22e544a4917) 6343647c601c52e1368623803854d971 c0ed64b8031c3730f411d2eb4eea35b5) a49b44d1979771252814e80f8ec446f9 ed17cf2e0169df9d443503ef94b23b33) 67a5b30d522ed92f75a1f16eef299d1a 62527c363bdd9ec598bed41947b379fc) 34fb605428fcc7aa4d62f44404c11509 0f678c91647380debd923963594981b3)resnet50	resnet101	resnet152
resnet50v2resnet101v2resnet152v2	resnext50
resnext101resnetTimagenet  softmaxc                    d|v r|                     d          ant                      a|rt          d|           |dv s3t          j        j                            |          st          d          |dk    r|r|	dk    rt          d          t          j	        |dd	t          j                    ||
          }|t                              |          }n3t          j        |          st                              ||          }n|}t          j                    dk    rdnd}t                              dd          |          }t                              ddd|d          |          }|sIt                              |dd          |          }t                              dd          |          }t                              dd           |          }t                              ddd!"          |          } | |          }|rIt                              |dd#          |          }t                              dd$          |          }|r^t                              d%          |          }t          j        |
|           t                              |	|
d&'          |          }nS|d(k    r$t                              d%          |          }n)|d)k    r#t                              d*          |          }|t/          j        |          }n|}t3          j        |||          }|dk    rr|t6          v ri|r|d+z   }t6          |         d,         }n|d-z   }t6          |         d         }t9          j        |t<          |z   d.|/          }|                    |           n||                    |           |S )0a  Instantiates the ResNet, ResNetV2, and ResNeXt architecture.

    Args:
      stack_fn: a function that returns output tensor for the
        stacked residual blocks.
      preact: whether to use pre-activation or not
        (True for ResNetV2, False for ResNet and ResNeXt).
      use_bias: whether to use biases for convolutional layers or not
        (True for ResNet and ResNetV2, False for ResNeXt).
      model_name: string, model name.
      include_top: whether to include the fully-connected
        layer at the top of the network.
      weights: one of `None` (random initialization),
        'imagenet' (pre-training on ImageNet),
        or the path to the weights file to be loaded.
      input_tensor: optional Keras tensor
        (i.e. output of `layers.Input()`)
        to use as image input for the model.
      input_shape: optional shape tuple, only to be specified
        if `include_top` is False (otherwise the input shape
        has to be `(224, 224, 3)` (with `channels_last` data format)
        or `(3, 224, 224)` (with `channels_first` data format).
        It should have exactly 3 inputs channels.
      pooling: optional pooling mode for feature extraction
        when `include_top` is `False`.
        - `None` means that the output of the model will be
            the 4D tensor output of the
            last convolutional layer.
        - `avg` means that global average pooling
            will be applied to the output of the
            last convolutional layer, and thus
            the output of the model will be a 2D tensor.
        - `max` means that global max pooling will
            be applied.
      classes: optional number of classes to classify images
        into, only to be specified if `include_top` is True, and
        if no `weights` argument is specified.
      classifier_activation: A `str` or callable. The activation function to use
        on the "top" layer. Ignored unless `include_top=True`. Set
        `classifier_activation=None` to return the logits of the "top" layer.
        When loading pretrained weights, `classifier_activation` can only
        be `None` or `"softmax"`.
      **kwargs: For backwards compatibility only.

    Returns:
      A `keras.Model` instance.
    layerszUnknown argument(s): >   Nr#   zThe `weights` argument should be either `None` (random initialization), `imagenet` (pre-training on ImageNet), or the path to the weights file to be loaded.r#   r$   zWIf using `weights` as `"imagenet"` with `include_top` as true, `classes` should be 1000       )default_sizemin_sizedata_formatrequire_flattenweightsN)shape)tensorr/   channels_last      )r2   r2   r4   	conv1_padpaddingname@         
conv1_convstridesuse_biasr8   >conv1_bnaxisepsilonr8   relu
conv1_relur8   r3   r3   rI   	pool1_pad
pool1_poolr>   r8   post_bn	post_reluavg_poolpredictions)
activationr8   avgmaxmax_poolz&_weights_tf_dim_ordering_tf_kernels.h5r   z,_weights_tf_dim_ordering_tf_kernels_notop.h5models)cache_subdir	file_hash) popr'   r   
ValueErrortfiogfileexistsr   obtain_input_shaper   image_data_formatInputis_keras_tensorZeroPadding2DConv2DBatchNormalization
ActivationMaxPooling2DGlobalAveragePooling2Dvalidate_activationDenseGlobalMaxPooling2Dr   get_source_inputsr   ModelWEIGHTS_HASHESr   get_fileBASE_WEIGHTS_PATHload_weights)stack_fnpreactr?   
model_nameinclude_topr.   input_tensorinput_shapepoolingclassesclassifier_activationkwargs	img_inputbn_axisxinputsmodel	file_namerW   weights_paths                       _/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/keras/applications/resnet.pyResNetr   L   sQ   | 6H%%#%% ;999:::)))RU[-?-?-H-H)<
 
 	
 *D1
 
 	
 !3-//#  K LL{L33		&|44 	%LLLII$I,../AAaaqG%5KHH	 	A 	b!QMMaPPA <%%( & 
 

  f<88;;%5KHHKKAAq|<<Q??AA ;%%( & 
 

  f;77:: 
>))z)::1==*+@'JJJLL 5M  
 

  e--:->>qAAAA))z)::1==A .|<< N61:666E 	:J.$@$@ 	6"%MMI&z215II KK  'z215I!*	)!	
 
 
 	<((((		7###L    r2   r3   c                    t          j                    dk    rdnd}|rUt                              d|z  d||dz             |           }t                              |d|dz   	          |          }n| }t                              |d||d
z             |           } t                              |d|dz   	          |           } t                              d|dz             |           } t                              ||d|dz             |           } t                              |d|dz   	          |           } t                              d|dz             |           } t                              d|z  d|dz             |           } t                              |d|dz   	          |           } t                              |dz             || g          } t                              d|dz             |           } | S )a  A residual block.

    Args:
      x: input tensor.
      filters: integer, filters of the bottleneck layer.
      kernel_size: default 3, kernel size of the bottleneck layer.
      stride: default 1, stride of the first layer.
      conv_shortcut: default True, use convolution shortcut if True,
          otherwise identity shortcut.
      name: string, block label.

    Returns:
      Output tensor for the residual block.
    r1   r2   r3      _0_convrL   r@   _0_bnrB   _1_conv_1_bnrE   _1_relurG   SAME_2_convr6   _2_bn_2_relu_3_conv_3_bn_add_out)r   r_   r'   rc   rd   re   Add)r}   filterskernel_sizestrideconv_shortcutr8   r|   shortcuts           r   block1r      sQ    ,../AAaaqG ==KF	1A ! 
 

  ,,( - 
 

  gq&ti7GHHKKA!!hTG^ 	" 	 			 		A 	&ti'788;;Af4)3C 	 	 			 		A 	!!hTG^ 	" 	 			 		A 	&ti'788;;Aa'k14)+;<<Q??A!!hTG^ 	" 	 			 		A 	

v
&&!}55A&tf}55a88AHr   r;   c           
          t          | |||dz             } t          d|dz             D ](}t          | |d|dz   t          |          z             } )| S )ad  A set of stacked residual blocks.

    Args:
      x: input tensor.
      filters: integer, filters of the bottleneck layer in a block.
      blocks: integer, blocks in the stacked blocks.
      stride1: default 2, stride of the first layer in the first block.
      name: string, stack label.

    Returns:
      Output tensor for the stacked blocks.
    _block1r   r8   r;   r3   F_blockr   r8   )r   rangestrr}   r   blocksstride1r8   is         r   stack1r   (  sq     	q''y0@AAAA1fqj!! 
 
we$/CFF2J
 
 
 Hr   Fc           	      h   t          j                    dk    rdnd}t                              |d|dz             |           }t                              d|dz   	          |          }|r-t                              d
|z  d||dz             |          }n,|dk    r$t                              d|          |           n| }t                              |ddd|dz             |          } t                              |d|dz             |           } t                              d|dz   	          |           } t                              d|dz             |           } t                              |||d|dz             |           } t                              |d|dz             |           } t                              d|dz   	          |           } t                              d
|z  d|dz   	          |           } t                              |dz   	          || g          } | S )a  A residual block.

    Args:
        x: input tensor.
        filters: integer, filters of the bottleneck layer.
        kernel_size: default 3, kernel size of the bottleneck layer.
        stride: default 1, stride of the first layer.
        conv_shortcut: default False, use convolution shortcut if True,
          otherwise identity shortcut.
        name: string, block label.

    Returns:
      Output tensor for the residual block.
    r1   r2   r3   r@   
_preact_bnrB   rE   _preact_relurG   r   r   rL   )r>   Fr   r=   r   r   rH   _2_padr6   r   r   r   r   r   )	r   r_   r'   rd   re   rc   rf   rb   r   )	r}   r   r   r   r   r8   r|   rr   r   s	            r   block2r   =  s    ,../AAaaqG&&hTL-@ '  	 	F vD>,ABB6JJF 
==KF	1A ! 
 

 
 :@!F6221555 	 	AD94D 	 	 		 	A 	!!hTG^ 	" 	 			 		A 	&ti'788;;A%5D8OLLQOOAI 	 	 	 		 		A 	!!hTG^ 	" 	 			 		A 	&ti'788;;Aa'k14)+;<<Q??A

v
&&!}55AHr   c           	          t          | |d|dz             } t          d|          D ]'}t          | ||dz   t          |          z             } (t          | |||dz   t          |          z             } | S )ap  A set of stacked residual blocks.

    Args:
        x: input tensor.
        filters: integer, filters of the bottleneck layer in a block.
        blocks: integer, blocks in the stacked blocks.
        stride1: default 2, stride of the first layer in the first block.
        name: string, stack label.

    Returns:
        Output tensor for the stacked blocks.
    Tr   r   r;   r   rG   r   )r   r   r   r   s         r   stack2r   v  s     	q'D94DEEEA1f > >1gD8Oc!ff$<===q''x#f++0MNNNAHr   r)   c           	        
 t          j                    dk    rdnd}|rYt                              d|z  |z  d|d|dz             |           }t                              |d|d	z   
          |          }n| }t                              |dd|dz             |           } t                              |d|dz   
          |           } t                              d|dz             |           } ||z  
t                              d|dz             |           } t                              ||
d|dz             |           } t          j        |           dd         }	t          j	        | t          j
        |	|

fg                    } t                              
fd|dz             |           } t          j	        | t          j
        |	|fg                    } t                              |d|dz   
          |           } t                              d|dz             |           } t                              d|z  |z  dd|dz             |           } t                              |d|dz   
          |           } t                              |dz             || g          } t                              d|dz             |           } | S ) a  A residual block.

    Args:
      x: input tensor.
      filters: integer, filters of the bottleneck layer.
      kernel_size: default 3, kernel size of the bottleneck layer.
      stride: default 1, stride of the first layer.
      groups: default 32, group size for grouped convolution.
      conv_shortcut: default True, use convolution shortcut if True,
          otherwise identity shortcut.
      name: string, block label.

    Returns:
      Output tensor for the residual block.
    r1   r2   r3   r9   Fr   r=   r@   r   rB   r   )r?   r8   r   rE   r   rG   rH   r   r6   r   )r>   depth_multiplierr?   r8   Nc                 V     t           fdt                    D                       S )Nc              3   B   K   | ]}d d d d d d d d |f         V  d S N ).0r   r}   s     r   	<genexpr>z+block3.<locals>.<lambda>.<locals>.<genexpr>  sB      991a111aaaA&999999r   )sumr   )r}   cs   `r   <lambda>zblock3.<locals>.<lambda>  s+    #9999a99999 r   	_2_reducer   r   r   r   r   r   )r   r_   r'   rc   rd   re   rb   DepthwiseConv2Dr/   reshapeconcatenateLambdar   )r}   r   r   r   groupsr   r8   r|   r   x_shaper   s             @r   block3r     sM   0 ,../AAaaqG ==6\W$	! ! 
 
   ,,( - 
 

  gq5ti7GHHKKA!!hTG^ 	" 	 			 		A 	&ti'788;;A6A%5D8OLLQOOAI 	 	 	 		 		A mAss#G7.&!Q/HIIJJA9999K 	 	 	 		 		A 	7.'/DEEFFA!!hTG^ 	" 	 			 		A 	&ti'788;;A	v !e$:J 	 	 			 		A 	!!hTG^ 	" 	 			 		A 	

v
&&!}55A&tf}55a88AHr   c                     t          | ||||dz             } t          d|dz             D ])}t          | ||d|dz   t          |          z             } *| S )a  A set of stacked residual blocks.

    Args:
      x: input tensor.
      filters: integer, filters of the bottleneck layer in a block.
      blocks: integer, blocks in the stacked blocks.
      stride1: default 2, stride of the first layer in the first block.
      groups: default 32, group size for grouped convolution.
      name: string, stack label.

    Returns:
      Output tensor for the stacked blocks.
    r   )r   r   r8   r;   r3   Fr   )r   r   r8   )r   r   r   )r}   r   r   r   r   r8   r   s          r   stack3r     sy     	q''&ti?OPPPA1fqj!! 
 
3q66)
 
 
 Hr   z$keras.applications.resnet50.ResNet50z"keras.applications.resnet.ResNet50zkeras.applications.ResNet50c                 4    d }t          |ddd| |||||f
i |S )z'Instantiates the ResNet50 architecture.c                     t          | dddd          } t          | ddd	          } t          | d
dd	          } t          | ddd	          S )Nr9   r2   r3   conv2r   r8      r   conv3rG         conv4   conv5r   r}   s    r   rq   zResNet50.<locals>.stack_fn  s]    1b!QW5551c17+++1c17+++aag....r   FTr   r   rt   r.   ru   rv   rw   rx   rz   rq   s           r   ResNet50r     sR     / / /     r   z#keras.applications.resnet.ResNet101zkeras.applications.ResNet101c                 4    d }t          |ddd| |||||f
i |S )z(Instantiates the ResNet101 architecture.c                     t          | dddd          } t          | ddd	          } t          | d
dd	          } t          | ddd	          S )Nr9   r2   r3   r   r   r   r   r   rG   r      r   r   r   r   r   s    r   rq   zResNet101.<locals>.stack_fn&  ]    1b!QW5551c17+++1c2G,,,aag....r   FTr   r   r   s           r   	ResNet101r     R    / / /     r   z#keras.applications.resnet.ResNet152zkeras.applications.ResNet152c                 4    d }t          |ddd| |||||f
i |S )z(Instantiates the ResNet152 architecture.c                     t          | dddd          } t          | ddd	          } t          | d
dd	          } t          | ddd	          S )Nr9   r2   r3   r   r   r      r   rG   r   $   r   r   r   r   r   s    r   rq   zResNet152.<locals>.stack_fnI  r   r   FTr   r   r   s           r   	ResNet152r   ;  r   r   z,keras.applications.resnet50.preprocess_inputz*keras.applications.resnet.preprocess_inputc                 0    t          j        | |d          S )Ncaffe)r,   mode)r   preprocess_input)r}   r,   s     r   r   r   ^  s%    
 *	{   r   z.keras.applications.resnet50.decode_predictionsz,keras.applications.resnet.decode_predictions   c                 .    t          j        | |          S )N)top)r   decode_predictions)predsr   s     r   r   r   h  s    
 ,U<<<<r    )r   reterrora9
  

  Reference:
  - [Deep Residual Learning for Image Recognition](
      https://arxiv.org/abs/1512.03385) (CVPR 2015)

  For image classification use cases, see
  [this page for detailed examples](
    https://keras.io/api/applications/#usage-examples-for-image-classification-models).

  For transfer learning use cases, make sure to read the
  [guide to transfer learning & fine-tuning](
    https://keras.io/guides/transfer_learning/).

  Note: each Keras Application expects a specific kind of input preprocessing.
  For ResNet, call `tf.keras.applications.resnet.preprocess_input` on your
  inputs before passing them to the model.
  `resnet.preprocess_input` will convert the input images from RGB to BGR,
  then will zero-center each color channel with respect to the ImageNet dataset,
  without scaling.

  Args:
    include_top: whether to include the fully-connected
      layer at the top of the network.
    weights: one of `None` (random initialization),
      'imagenet' (pre-training on ImageNet),
      or the path to the weights file to be loaded.
    input_tensor: optional Keras tensor (i.e. output of `layers.Input()`)
      to use as image input for the model.
    input_shape: optional shape tuple, only to be specified
      if `include_top` is False (otherwise the input shape
      has to be `(224, 224, 3)` (with `'channels_last'` data format)
      or `(3, 224, 224)` (with `'channels_first'` data format).
      It should have exactly 3 inputs channels,
      and width and height should be no smaller than 32.
      E.g. `(200, 200, 3)` would be one valid value.
    pooling: Optional pooling mode for feature extraction
      when `include_top` is `False`.
      - `None` means that the output of the model will be
          the 4D tensor output of the
          last convolutional block.
      - `avg` means that global average pooling
          will be applied to the output of the
          last convolutional block, and thus
          the output of the model will be a 2D tensor.
      - `max` means that global max pooling will
          be applied.
    classes: optional number of classes to classify images
      into, only to be specified if `include_top` is True, and
      if no `weights` argument is specified.
    classifier_activation: A `str` or callable. The activation function to use
      on the "top" layer. Ignored unless `include_top=True`. Set
      `classifier_activation=None` to return the logits of the "top" layer.
      When loading pretrained weights, `classifier_activation` can only
      be `None` or `"softmax"`.

  Returns:
    A Keras model instance.
__doc__)r"   Tr#   NNNr$   r%   )r2   r3   TN)r;   N)r2   r3   FN)r2   r3   r)   TN)r;   r)   N)Tr#   NNNr$   r   )r   )'r   tensorflow.compat.v2compatv2rZ   kerasr   keras.applicationsr   keras.enginer   keras.layersr   keras.utilsr   r    tensorflow.python.util.tf_exportr	   ro   rm   r'   r   r   r   r   r   r   r   r   r   r   r   r   PREPROCESS_INPUT_DOCformatPREPROCESS_INPUT_RET_DOC_CAFFEPREPROCESS_INPUT_ERROR_DOCDOCsetattrr   r   r   <module>r      s     " ! ! ! ! ! ! ! !       - - - - - - ! ! ! ! ! ! + + + + + + " " " " " " # # # # # # : 9 9 9 9 9 K ;! !F 
 #f f f fR0 0 0 0f   *6 6 6 6r   . 	L L L L^   4 *(!     
@ )+I     @ )+I     @ 20   	  42 = = =	 = *>EE	5

3 F    
 ,>F  :x )X-3 4 4 4 	9i/#5 6 6 6 	9i/#5 6 6 6 6 6r   