
    ~Why                     B   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d
lmZ dZedz   Zedz   Zedz   Zedz   Z e            Z	 	 	 	 	 	 	 	 	 	 	 	 	 d,dZ edd          	 	 	 	 	 	 	 d-d            Z edd          	 	 	 	 	 	 	 d-d            Z	 d.d!Zd/d"Zd/d#Z d/d$Z! ed%          d/d&            Z" ed'          d0d)            Z#ej$        %                    d*ej&        ej'        +          e"_         ej#        j         e#_         dS )1aG  NASNet-A models for Keras.

NASNet refers to Neural Architecture Search Network, a family of models
that were designed automatically by learning the model architectures
directly on the dataset of interest.

Here we consider NASNet-A, the highest performance model that was found
for the CIFAR-10 dataset, and then extended to ImageNet 2012 dataset,
obtaining state of the art performance on CIFAR-10 and ImageNet 2012.
Only the NASNet-A models, and their respective weights, which are suited
for ImageNet 2012 are provided.

The below table describes the performance on ImageNet 2012:
---------------------------------------------------------------------------
Architecture         | Top-1 Acc | Top-5 Acc |  Multiply-Adds |  Params (M)
---------------------|-----------|-----------|----------------|------------
NASNet-A (4 @ 1056)  |   74.0 %  |   91.6 %  |       564 M    |     5.3
NASNet-A (6 @ 4032)  |   82.7 %  |   96.2 %  |      23.8 B    |    88.9

Reference:
  - [Learning Transferable Architectures for Scalable Image Recognition](
      https://arxiv.org/abs/1707.07012) (CVPR 2018)
    N)backend)imagenet_utils)training)VersionAwareLayers)
data_utils)layer_utils)
tf_logging)keras_exportzDhttps://storage.googleapis.com/tensorflow/keras-applications/nasnet/zNASNet-mobile.h5zNASNet-mobile-no-top.h5zNASNet-large.h5zNASNet-large-no-top.h5     `   T   imagenet  softmaxc           
      	   |dv s3t           j        j                            |          st	          d          |dk    r|r|
dk    rt	          d          t          | t                    r,d| v r(|dk    r"t	          dt          |           z   dz             |d	}t          j	        | |d
t          j                    ||          } t          j                    dk    r+t          j        d           t          j        d           d}nd}|t                              |           }n3t          j        |          st                              ||           }n|}|d|dz  z  z  dk    rt	          d|z            t          j                    dk    rdnd}|dz  }t                              |dddddd          |          }t                              |ddd !          |          }d}t)          ||||dz  z  d"#          \  }}t)          ||||z  d$#          \  }}t+          |          D ]}t-          |||d%|z  #          \  }}t)          ||||z  d&|z  #          \  }}|s|n|}t+          |          D ]$}t-          ||||z  d%||z   dz   z  #          \  }}%t)          ||||dz  z  d&d|z  z  #          \  }}|s|n|}t+          |          D ]*}t-          ||||dz  z  d%d|z  |z   dz   z  #          \  }}+t                              d'          |          }|r\t                                          |          }t          j        ||           t                              |
|d()          |          }nO|	d*k    r"t                                          |          }n'|	d+k    r!t                                          |          }|t9          j        |          }n|}t=          j        ||d,-          }|dk    r|d.k    rS|rtA          j!        d/tD          d0d12          }ntA          j!        d3tF          d0d42          }|$                    |           n|d	k    rS|rtA          j!        d5tJ          d0d62          }ntA          j!        d7tL          d0d82          }|$                    |           n&t	          d9          ||$                    |           |rt          j        |           |S ):a  Instantiates a NASNet model.

    Reference:
    - [Learning Transferable Architectures for Scalable Image Recognition](
        https://arxiv.org/abs/1707.07012) (CVPR 2018)

    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 NasNet, call `tf.keras.applications.nasnet.preprocess_input`
    on your inputs before passing them to the model.
    `nasnet.preprocess_input` will scale input pixels between -1 and 1.

    Args:
      input_shape: Optional shape tuple, the input shape
        is by default `(331, 331, 3)` for NASNetLarge and
        `(224, 224, 3)` for NASNetMobile.
        It should have exactly 3 input channels,
        and width and height should be no smaller than 32.
        E.g. `(224, 224, 3)` would be one valid value.
      penultimate_filters: Number of filters in the penultimate layer.
        NASNet models use the notation `NASNet (N @ P)`, where:
            -   N is the number of blocks
            -   P is the number of penultimate filters
      num_blocks: Number of repeated blocks of the NASNet model.
        NASNet models use the notation `NASNet (N @ P)`, where:
            -   N is the number of blocks
            -   P is the number of penultimate filters
      stem_block_filters: Number of filters in the initial stem block
      skip_reduction: Whether to skip the reduction step at the tail
        end of the network.
      filter_multiplier: Controls the width of the network.
        - If `filter_multiplier` < 1.0, proportionally decreases the number
            of filters in each layer.
        - If `filter_multiplier` > 1.0, proportionally increases the number
            of filters in each layer.
        - If `filter_multiplier` = 1, default number of filters from the
             paper are used at each layer.
      include_top: Whether to include the fully-connected
        layer at the top of the network.
      weights: `None` (random initialization) or
          `imagenet` (ImageNet weights)
      input_tensor: Optional Keras tensor (i.e. output of
        `layers.Input()`)
        to use as image input for the model.
      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.
      default_size: Specifies the default image size of the model
      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.
    >   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 1000NzWhen specifying the input shape of a NASNet and loading `ImageNet` weights, the input_shape argument must be static (no None entries). Got: `input_shape=z`.K      )default_sizemin_sizedata_formatrequire_flattenweightschannels_lasta  The NASNet family of models is only available for the input data format "channels_last" (width, height, channels). However your settings specify the default data format "channels_first" (channels, width, height). You should set `image_data_format="channels_last"` in your Keras config located at ~/.keras/keras.json. The model being returned right now will expect inputs to follow the "channels_last" data format.channels_first)shape)tensorr      r   r   zwFor NASNet-A models, the `penultimate_filters` must be a multiple of 24 * (`filter_multiplier` ** 2). Current value: %d      r"   r   r   validF
stem_conv1	he_normal)stridespaddinguse_biasnamekernel_initializerZڊ?MbP?stem_bn1axismomentumepsilonr*   stem_1block_idstem_2z%dz	reduce_%drelupredictions)
activationr*   avgmaxNASNetr*      znasnet_mobile.h5models 020fb642bf7360b370c678b08e0adf61)cache_subdir	file_hashznasnet_mobile_no_top.h5 1ed92395b5b598bdda52abe5c0dbfd63znasnet_large.h5 11577c9a518f0070763c2b964a382f17znasnet_large_no_top.h5 d81d89dc07e6e56530c4e77faddd61b5zDImageNet weights can only be loaded with NASNetLarge or NASNetMobile)'tfiogfileexists
ValueError
isinstancetuplestrr   obtain_input_shaper   image_data_formatloggingwarningset_image_data_formatlayersInputis_keras_tensorConv2DBatchNormalization_reduction_a_cellrange_normal_a_cell
ActivationGlobalAveragePooling2Dvalidate_activationDenseGlobalMaxPooling2Dr   get_source_inputsr   Modelr   get_fileNASNET_MOBILE_WEIGHT_PATH NASNET_MOBILE_WEIGHT_PATH_NO_TOPload_weightsNASNET_LARGE_WEIGHT_PATHNASNET_LARGE_WEIGHT_PATH_NO_TOP)input_shapepenultimate_filters
num_blocksstem_block_filtersskip_reductionfilter_multiplierinclude_topr   input_tensorpoolingclassesr   classifier_activationold_data_format	img_inputchannel_dimfiltersxpip0inputsmodelweights_paths                           _/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/keras/applications/nasnet.pyr<   r<   @   s   v )))RU[-?-?-H-H)<
 
 	
 *D0
 
 	
 	;&&

Kz!!4 7:+6F6FG JNN
 
 	
  !3!-//#  K  ""o559
	
 
	
 
	
 	%o666*LL{L33		&|44 	%LLLII$Ib$5q$89:a??D!"
 
 	
 0226FFF!!BK!R'G& 	 	 	 	 	A 	!!64j 	" 	 			 		A 	A	1g+Q./(  DAq 	1g**X  DAq : B BaGdajAAA11	1g))K:4N  EAr !'aA: 
 
''Z!^a/0	
 
 
11 		#Q&&J/	  EAr !'aA: 
 
'**Q^a/!34	
 
 
11 	&!!!$$A 
/))++A..*+@'JJJLL 5M  
 

  e--//22AA))++A..A .|<<N618444E *3 )2&-!)@	       *2-4!)@	      |,,,,S   )2%,!)@	       *2,3!)@	      |,,,,#   
	7### 7%o666L    z&keras.applications.nasnet.NASNetMobilezkeras.applications.NASNetMobilec                 :    t          | ddddd|||||d|          S )a
  Instantiates a Mobile NASNet model in ImageNet mode.

    Reference:
    - [Learning Transferable Architectures for Scalable Image Recognition](
        https://arxiv.org/abs/1707.07012) (CVPR 2018)

    Optionally loads weights pre-trained on ImageNet.
    Note that the data format convention used by the model is
    the one specified in your Keras config at `~/.keras/keras.json`.

    Note: each Keras Application expects a specific kind of input preprocessing.
    For NASNet, call `tf.keras.applications.nasnet.preprocess_input` on your
    inputs before passing them to the model.

    Args:
        input_shape: Optional shape tuple, only to be specified
            if `include_top` is False (otherwise the input shape
            has to be `(224, 224, 3)` for NASNetMobile
            It should have exactly 3 inputs channels,
            and width and height should be no smaller than 32.
            E.g. `(224, 224, 3)` would be one valid value.
        include_top: Whether to include the fully-connected
            layer at the top of the network.
        weights: `None` (random initialization) or
            `imagenet` (ImageNet weights). For loading `imagenet` weights,
            `input_shape` should be (224, 224, 3)
        input_tensor: Optional Keras tensor (i.e. output of
            `layers.Input()`)
            to use as image input for the model.
        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"`.

    Returns:
        A Keras model instance.

    Raises:
        ValueError: In case of invalid argument for `weights`,
            or invalid input shape.
        RuntimeError: If attempting to run this model with a
            backend that does not support separable convolutions.
    i      r   Fr   r>   ri   rj   rk   rl   rm   rn   r   ro   rp   rq   r   rr   r<   rh   rn   r   ro   rp   rq   rr   s          r~   NASNetMobiler   d  sC    N  !3   r   z%keras.applications.nasnet.NASNetLargezkeras.applications.NASNetLargec                 :    t          | ddddd|||||d|          S )a
  Instantiates a NASNet model in ImageNet mode.

    Reference:
    - [Learning Transferable Architectures for Scalable Image Recognition](
        https://arxiv.org/abs/1707.07012) (CVPR 2018)

    Optionally loads weights pre-trained on ImageNet.
    Note that the data format convention used by the model is
    the one specified in your Keras config at `~/.keras/keras.json`.

    Note: each Keras Application expects a specific kind of input preprocessing.
    For NASNet, call `tf.keras.applications.nasnet.preprocess_input` on your
    inputs before passing them to the model.

    Args:
        input_shape: Optional shape tuple, only to be specified
            if `include_top` is False (otherwise the input shape
            has to be `(331, 331, 3)` for NASNetLarge.
            It should have exactly 3 inputs channels,
            and width and height should be no smaller than 32.
            E.g. `(224, 224, 3)` would be one valid value.
        include_top: Whether to include the fully-connected
            layer at the top of the network.
        weights: `None` (random initialization) or
            `imagenet` (ImageNet weights).  For loading `imagenet` weights,
            `input_shape` should be (331, 331, 3)
        input_tensor: Optional Keras tensor (i.e. output of
            `layers.Input()`)
            to use as image input for the model.
        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"`.

    Returns:
        A Keras model instance.

    Raises:
        ValueError: in case of invalid argument for `weights`,
            or invalid input shape.
        RuntimeError: If attempting to run this model with a
            backend that does not support separable convolutions.
    r   r   r   Tr   r   r   r   r   s          r~   NASNetLarger     sC    N  !3   r   r!   r   r   c                    t          j                    dk    rdnd}t          j        d|           5  t                              d          |           }|dk    r=t                              t          j        ||          d|           |          }d	}nd
}t                              |||d| |dd          |          }t          	                    |ddd|           |          }t                              d          |          }t                              ||d| d
dd          |          }t          	                    |ddd|           |          }ddd           n# 1 swxY w Y   |S )aF  Adds 2 blocks of [relu-separable conv-batchnorm].

    Args:
        ip: Input tensor
        filters: Number of output filters per layer
        kernel_size: Kernel size of separable convolutions
        strides: Strided convolution for downsampling
        block_id: String block_id

    Returns:
        A Keras tensor
    r   r   r    separable_conv_block_r7   r#   separable_conv_1_pad_r(   r*   r$   sameseparable_conv_1_Fr&   )r'   r*   r(   r)   r+   r,   r-   separable_conv_1_bn_r/   separable_conv_2_)r*   r(   r)   r+   separable_conv_2_bn_N)
r   rO   
name_scoperS   r[   ZeroPadding2Dr   correct_padSeparableConv2DrW   )iprv   kernel_sizer'   r5   ru   rw   conv_pads           r~   _separable_conv_blockr     s5    0226FFF!!BK		>H>>	?	? ' 'f%%b))f$$&21kBB7X77 %    A HHH""/X//* # 
 
   %%222	 & 
 

   f%%a((""/X//* # 
 
   %%222	 & 
 

  E' ' ' ' ' ' ' ' ' ' ' ' ' ' 'P Hs   D3E22E69E6c                    t          j                    dk    rdnd}t          j                    dk    rdnd}t          j        |          }| t          j        |           }t          j        d          5  | |} nW||         ||         k    rt          j        d|           5  t	                              d	d
|           |           } t	                              dddd|           |           }t	                              |dz  dddd| d          |          }t	                              d          |           }	t	          	                    d          |	          }	t	                              dddd|           |	          }	t	                              |dz  dddd| d          |	          }	t          
                    ||	g|          } t	                              |ddd|            |           } ddd           n# 1 swxY w Y   n||         |k    rt          j        d!|           5  t	                              d	          |           } t	                              |dddd"| dd#          |           } t	                              |ddd|            |           } ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   | S )$a  Adjusts the input `previous path` to match the shape of the `input`.

    Used in situations where the output number of filters needs to be changed.

    Args:
        p: Input tensor which needs to be modified
        ip: Input tensor whose shape needs to be matched
        filters: Number of output filters to be matched
        block_id: String block_id

    Returns:
        Adjusted Keras tensor
    r   r   r    r   Nadjust_blockadjust_reduction_block_r7   adjust_relu_1_r=   r   r#   r$   adjust_avg_pool_1_r'   r(   r*   r   Fadjust_conv_1_r&   )r(   r)   r*   r+   )r   r   r   )r(   )r   r   r   )croppingadjust_avg_pool_2_adjust_conv_2_)r0   r,   r-   
adjust_bn_r/   adjust_projection_block_adjust_conv_projection_r'   r(   r*   r)   r+   )r   rO   	int_shaper   rS   r[   AveragePooling2DrV   r   
Cropping2DconcatenaterW   )
rx   r   rv   r5   ru   img_dimip_shapep_shapep1p2s
             r~   _adjust_blockr   P  sh    0226FFF!!BK,..2BBBaaG $$H}#A&&		N	+	+ B B9AAW'!222#$Hh$H$HII * *%%f3NH3N3N%OO  ,,"#8h88	 -  
   ]]qL""4(44'2 #     ))2B)CCAFF&&0@&AA"EE,,"#8h88	 -  
   ]]qL""4(44'2 #     &&Bxk&BB--$# 0h00	 .  
  K* * * * * * * * * * * * * * *X [!W,,#$Ix$I$IJJ  %%f--a00MM""=8=="'2 "     --$# 0h00	 .  
                eB B B B B B B B B B B B B B BF Hs\   51K&E#H	KH	KH	'KA8K<KK	KK	KK#&K#c                    t          j                    dk    rdnd}t          j        d|           5  t          || ||          }t	                              d          |           }t	                              |dddd| d	d
          |          }t	                              |ddd|           |          }t          j        d          5  t          ||dd|           }t          ||d|           }t          	                    ||gd|           }ddd           n# 1 swxY w Y   t          j        d          5  t          ||dd|           }	t          ||dd|           }
t          	                    |	|
gd|           }ddd           n# 1 swxY w Y   t          j        d          5  t	          
                    dddd|            |          }t          	                    ||gd!|           }ddd           n# 1 swxY w Y   t          j        d"          5  t	          
                    dddd#|            |          }t	          
                    dddd$|            |          }t          	                    ||gd%|           }ddd           n# 1 swxY w Y   t          j        d&          5  t          ||d'|           }t          	                    ||gd(|           }ddd           n# 1 swxY w Y   t                              ||||||g|d)| *          }ddd           n# 1 swxY w Y   || fS )+zAdds a Normal cell for NASNet-A (Fig. 4 in the paper).

    Args:
        ip: Input tensor `x`
        p: Input tensor `p`
        filters: Number of output filters
        block_id: String block_id

    Returns:
        A Keras tensor
    r   r   r    normal_A_block_r7   r   r   normal_conv_1_Fr&   r   r,   r-   normal_bn_1_r/   block_1   r   normal_left1_)r   r5   normal_right1_r4   normal_add_1_r=   Nblock_2normal_left2_r!   normal_right2_normal_add_2_block_3normal_left3_r   normal_add_3_block_4normal_left4_normal_right4_normal_add_4_block_5normal_left5_normal_add_5_normal_concat_r0   r*   )r   rO   r   r   rS   r[   rV   rW   r   addr   r   )r   rx   rv   r5   ru   hx1_1x1_2x1x2_1x2_2x2x3x4_1x4_2x4x5rw   s                     r~   rZ   rZ     s#    0226FFF!!BK		8h88	9	9 K
 K
!R(33f%%b))MM,(,,*  
 
   %%***	 & 
 

   	** 
	K 
	K("333	  D )7%@h%@%@  D T4L/Ix/I/IJJB
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 
	K 	** 	K 	K(7F-GX-G-G  D )7F-Hh-H-H  D T4L/Ix/I/IJJB	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	** 	F 	F((/X//	 )  
  B RG*D(*D*DEEB	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	** 	K 	K**/X//	 +  
  D **0h00	 +  
  D T4L/Ix/I/IJJB	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	** 	F 	F&7%?X%?%?  B RG*D(*D*DEEB		F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F BB#,(,,  
 
OK
 K
 K
 K
 K
 K
 K
 K
 K
 K
 K
 K
 K
 K
 K
X b5Ls   BMAD*M*D.	.M1D.	2M	AF#M#F'	'M*F'	+MAHMH	M H	!M8A4J8,M8J<	<M?J<	 M7LML	M!L	")MMMc                    t          j                    dk    rdnd}t          j        d|           5  t          || ||          }t	                              d          |           }t	                              |dddd| d	d
          |          }t	                              |ddd|           |          }t	                              t          j
        |d          d|           |          }t          j        d          5  t          ||ddd|           }t          ||ddd|           }t                              ||gd|           }	ddd           n# 1 swxY w Y   t          j        d          5  t	                              dddd | !          |          }
t          ||ddd"|           }t                              |
|gd#|           }ddd           n# 1 swxY w Y   t          j        d$          5  t	                              dddd%| !          |          }t          ||ddd&|           }t                              ||gd'|           }ddd           n# 1 swxY w Y   t          j        d(          5  t	                              dddd)| !          |	          }t                              ||g          }ddd           n# 1 swxY w Y   t          j        d*          5  t          |	|dd)| +          }t	                              dddd,| !          |          }t                              ||gd-|           }ddd           n# 1 swxY w Y   t                              ||||g|d.| /          }|| fcddd           S # 1 swxY w Y   dS )0zAdds a Reduction cell for NASNet-A (Fig. 4 in the paper).

    Args:
      ip: Input tensor `x`
      p: Input tensor `p`
      filters: Number of output filters
      block_id: String block_id

    Returns:
      A Keras tensor
    r   r   r    reduction_A_block_r7   r   r   reduction_conv_1_Fr&   r   r,   r-   reduction_bn_1_r/   r"   reduction_pad_1_r   r   r   r#   reduction_left1_)r'   r5   )   r   reduction_right1_reduction_add_1_r=   Nr   r!   r$   reduction_left2_r   reduction_right2_reduction_add_2_r   reduction_left3_reduction_right3_reduction_add3_r   reduction_left4_r   r4   reduction_right5_reduction_add4_reduction_concat_r   )r   rO   r   r   rS   r[   rV   rW   r   r   r   r   r   MaxPooling2Dr   r   )r   rx   rv   r5   ru   r   h3r   r   r   r   r   r   x3_1x3_2r   r   x5_1x5_2r   rw   s                        r~   rX   rX   	  s    0226FFF!!BK		;;;	<	< c c!R(33f%%b))MM/X//*  
 
   %%-8--	 & 
 

   !!".q!44.H.. " 
 
  
 	** 	N 	N(6H66  D )7X77  D T4L/L(/L/LMMB	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N" 	** 	N 	N&&222	 '  
  D )7X77  D T4L/L(/L/LMMB	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N  	** 	M 	M**222	 +  
  D )7X77  D T4L/K/K/KLLB	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M  	** 	& 	&((222	 )  
  B RH%%B	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	** 
	M 
	M(GV.K.K.K  D &&333	 '  
  D T4L/K/K/KLLB
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M R/X//  
 

 "uGc c c c c c c c c c c c c c c c c cs   CN=AE'N='E+	+N=.E+	/N=A"G4(N=4G8	8N=;G8	<N=A"J5N=J	N=J		N= AK2&N=2K6	6N=9K6	:N=A!M>2N=>N	N=N	*N==OOz*keras.applications.nasnet.preprocess_inputc                 0    t          j        | |d          S )NrF   )r   mode)r   preprocess_input)rw   r   s     r~   r   r   }  s#    *	{   r   z,keras.applications.nasnet.decode_predictionsr   c                 .    t          j        | |          S )N)top)r   decode_predictions)predsr   s     r~   r   r     s    ,U<<<<r    )r   reterror)Nr   r   r   Tr   Tr   NNr   Nr   )NTr   NNr   r   )r!   r   N)N)r   )(__doc__tensorflow.compat.v2compatv2rF   kerasr   keras.applicationsr   keras.enginer   keras.layersr   keras.utilsr   r   tensorflow.python.platformr	   rP    tensorflow.python.util.tf_exportr
   BASE_WEIGHTS_PATHrc   rd   rf   rg   rS   r<   r   r   r   r   rZ   rX   r   r   PREPROCESS_INPUT_DOCformatPREPROCESS_INPUT_RET_DOC_TFPREPROCESS_INPUT_ERROR_DOC r   r~   <module>r     s    0 " ! ! ! ! ! ! ! !       - - - - - - ! ! ! ! ! ! + + + + + + " " " " " " # # # # # # = < < < < < 9 9 9 9 9 9 K  .0BB #47P#P  ,/@@ "36N"N 				 #a a a aH	 ,.O  #R R R Rj +-M  #R R R Rl ?C9 9 9 9xY Y Y YxZ Z Z Zzq q q qh :;;   <; <=== = = >== *>EE	2

3 F    
 ,>F    r   