
    6bi                     @   S r SSKJs  Jr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  Sr\S-   r\S-   r\S-   r\S-   r\" 5       r             S!S jr\" SS5             S"S j5       r\" SS5             S"S j5       r S#S jrS$S jrS$S jr S$S jr!\" S5      S$S j5       r"\" S5      S%S j5       r#\RH                  RK                  S\RL                  \RN                  S 9\"l         \RF                  R                   \#l         g)&aJ  NASNet-A models for TF-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.h5c           
      2	   US;   d9  [         R                  R                  R                  U5      (       d  [	        S5      eUS:X  a  U(       a  U
S:w  a  [	        S5      e[        U [        5      (       a&  SU ;   a   US:X  a  [	        S[        U 5      -   S-   5      eUc  S	n[        R                  " U US
[        R                  " 5       UUS9n [        R                  " 5       S:w  a/  [        R                  " S5        [        R                  " S5        SnOSnUc  [        R!                  U S9nO1[        R"                  " U5      (       d  [        R!                  XS9nOUnUSUS-  -  -  S:w  a  [	        SU-  5      e[        R                  " 5       S:X  a  SOSnUS-  n[        R%                  USSSSSSS9" U5      n[        R'                  USSS S!9" U5      nSn[)        UUUUS-  -  S"S#9u  nn[)        UUUU-  S$S#9u  nn[+        U5       H  n[-        UUUS%U-  S#9u  nnM     [)        UUUU-  S&U-  S#9u  nnU(       d  UOUn[+        U5       H  n[-        UUUU-  S%UU-   S-   -  S#9u  nnM      [)        UUUUS-  -  S&SU-  -  S#9u  nnU(       d  UOUn[+        U5       H$  n[-        UUUUS-  -  S%SU-  U-   S-   -  S#9u  nnM&     [        R/                  S'5      " U5      nU(       aK  [        R1                  5       " U5      n[        R2                  " X5        [        R5                  XS(S)9" U5      nOAU	S*:X  a  [        R1                  5       " U5      nO U	S+:X  a  [        R7                  5       " U5      nUb  [8        R:                  " U5      nOUn[<        R>                  " UUS,S-9nUS:X  a  US.:X  aP  U(       a  [@        RB                  " S/[D        S0S1S29nO[@        RB                  " S3[F        S0S4S29nURI                  U5        OuUS	:X  aP  U(       a  [@        RB                  " S5[J        S0S6S29nO[@        RB                  " S7[L        S0S8S29nURI                  U5        O[	        S95      eUb  URI                  U5        U(       a  [        R                  " U5        U$ ):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 TF-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 TF-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.
>   NimagenetzThe `weights` argument should be either `None` (random initialization), `imagenet` (pre-training on ImageNet), or the path to the weights file to be loaded.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 TF-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   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                           Z/home/james-whalen/.local/lib/python3.13/site-packages/tf_keras/src/applications/nasnet.pyr8   r8   @   s#   x ))RUU[[-?-?-H-H<
 	
 *D0
 	
 	;&&Kz!4 7:+6FG JNN
 	
  !33!--/#K   "o59
	
 	%%o6*LL{L3	&&|44LLI$Ib$5q$89:a?D!"
 	
 0026FF!BK!R'G& 	 	 	A 	!!64j 	" 			A 	A	1g+Q./(DAq 	1g**XDAq :aGdajA1  	1g))K:4NEAr !aA:''Z!^a/0	
1  		#Q&&J/	EAr !aA:'**Q^a/!34	
1  	&!!$A))+A.**+@JLLM  

 e--/2A))+A.A ..|<NN6184E *3)22&-!)@	   *22-4!)@	  |,S )22%,!)@	   *22,3!)@	  |,#  
	7#%%o6L    z&keras.applications.nasnet.NASNetMobilezkeras.applications.NASNetMobilec                 ,    [        U SSSSSUUUUUSUS9$ )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 TF-Keras config at `~/.keras/keras.json`.

Note: each TF-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 TF-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 TF-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:   re   rf   rg   rh   ri   rj   r   rk   rl   rm   r   rn   r8   rd   rj   r   rk   rl   rm   rn   s          rz   NASNetMobiler   e  s9    P  !3 r{   z%keras.applications.nasnet.NASNetLargezkeras.applications.NASNetLargec                 ,    [        U SSSSSUUUUUSUS9$ )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 TF-Keras config at `~/.keras/keras.json`.

Note: each TF-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 TF-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 TF-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.
     `   Tr   r   r~   r   r   s          rz   NASNetLarger     s9    P  !3 r{   c                    [         R                  " 5       S:X  a  SOSn[         R                  " SU 35         [        R	                  S5      " U 5      nUS:X  a4  [        R                  [        R                  " Xb5      SU 3S9" U5      nS	nOS
n[        R                  UUUSU 3USSS9" U5      n[        R                  USSSU 3S9" U5      n[        R	                  S5      " U5      n[        R                  UUSU 3S
SSS9" U5      n[        R                  USSSU 3S9" U5      nSSS5        U$ ! , (       d  f       W$ = f)a%  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 TF-Keras tensor
r   r   r   separable_conv_block_r3   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   rK   
name_scoperO   rW   ZeroPadding2Dr   correct_padSeparableConv2DrS   )iprr   kernel_sizer#   r1   rq   rs   conv_pads           rz   _separable_conv_blockr     s    0026FF!BK			3H:>	?f%b)f$$&221B,XJ7 %  A HH""$XJ/* # 
  %%'z2	 & 

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

 E 
@P HQ 
@	?P Hs   C4D55
Ec                    [         R                  " 5       S:X  a  SOSn[         R                  " 5       S:X  a  SOSn[         R                  " U5      nU b  [         R                  " U 5      n[         R                  " S5         U c  Un GOWU   Xe   :w  Ga,  [         R                  " SU 35         [        R                  S	S
U 3S9" U 5      n [        R                  SSSSU 3S9" U 5      n[        R                  US-  SSSSU 3SS9" U5      n[        R                  SS9" U 5      n	[        R                  SS9" U	5      n	[        R                  SSSSU 3S9" U	5      n	[        R                  US-  SSSSU 3SS9" U	5      n	[        R                  X/US9n [        R                  USSSU 3S 9" U 5      n SSS5        OXt   U:w  a~  [         R                  " S!U 35         [        R                  S	5      " U 5      n [        R                  USSSS"U 3SSS#9" U 5      n [        R                  USSSU 3S 9" U 5      n SSS5        SSS5        U $ ! , (       d  f       N= f! , (       d  f       N)= f! , (       d  f       U $ = f)$au  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 TF-Keras tensor
r   r   r   r   Nadjust_blockadjust_reduction_block_r3   adjust_relu_1_r9   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_)r,   r(   r)   
adjust_bn_r+   adjust_projection_block_adjust_conv_projection_r#   r$   r&   r%   r'   )r   rK   	int_shaper   rO   rW   AveragePooling2DrR   r   
Cropping2DconcatenaterS   )
rt   r   rr   r1   rq   img_dimip_shapep_shapep1p2s
             rz   _adjust_blockr   S  s    0026FF!BK,,.2BBaG  $H}##A&			N	+9AW!22##&=hZ$HI%%f^H:3N%O ,,"#-hZ8	 - 
  ]]qL"")(4'2 #   ))2B)CAF&&0@&A"E,,"#-hZ8	 - 
  ]]qL"")(4'2 #   &&xk&B--$# %hZ0	 . 
 K JIX !W,##&>xj$IJ%%f-a0MM""28*="'2 "   --$# %hZ0	 . 
  Ke 
,F H} JIZ KJe 
,	+F Hs>    -I2-D
I7*I2!AI!>I2
I	I2!
I/	+I22
Jc                    [         R                  " 5       S:X  a  SOSn[         R                  " SU 35         [        XX#5      n[        R                  S5      " U 5      n[        R                  USSSSU 3S	S
S9" U5      n[        R                  USSSU 3S9" U5      n[         R                  " S5         [        UUSSU 3S9n[        XSU 3S9n[        R                  Xg/SU 3S9nSSS5        [         R                  " S5         [        XSSU 3S9n	[        XSSU 3S9n
[        R                  X/SU 3S9nSSS5        [         R                  " S5         [        R                  SSSSU 3S 9" U5      n[        R                  X/S!U 3S9nSSS5        [         R                  " S"5         [        R                  SSSS#U 3S 9" U5      n[        R                  SSSS$U 3S 9" U5      n[        R                  X/S%U 3S9nSSS5        [         R                  " S&5         [        XRS'U 3S9n[        R                  UU/S(U 3S9nSSS5        [        R                  UWWWWW/US)U 3S*9nSSS5        UU 4$ ! , (       d  f       GN= f! , (       d  f       GN[= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       WU 4$ = f)+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 TF-Keras tensor
r   r   r   normal_A_block_r3   r   r   normal_conv_1_Fr"   r   r(   r)   normal_bn_1_r+   block_1   r   normal_left1_)r   r1   normal_right1_r0   normal_add_1_r9   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_r,   r&   )r   rK   r   r   rO   rW   rR   rS   r   addr   r   )r   rt   rr   r1   rq   hx1_1x1_2x1x2_1x2_2x2x3x4_1x4_2x4x5rs   s                     rz   rV   rV     sZ    0026FF!BK			ohZ8	9!3f%b)MM!(,*  
  %%z*	 & 

  	*("(
3	D )~hZ%@D TLxj/IJB + 	*(F}XJ-GD )F~hZ-HD TLxj/IJB + 	*(($XJ/	 ) 
 B RGM(*DEB + 	***$XJ/	 + 
 D **%hZ0	 + 
 D TLxj/IJB + 	*&}XJ%?B RGM(*DEB	 + BB#!(,  
O 
:X b5Lq +* +* +* +* +*C 
:	9X b5Ls   A?K65J +K	5J>K8J$K2AJ6	K''K&K 
J	
K
J!	K$
J3	.K6
K	 K
K	K
K)c                    [         R                  " 5       S:X  a  SOSn[         R                  " SU 35         [        XX#5      n[        R                  S5      " U 5      n[        R                  USSSSU 3S	S
S9" U5      n[        R                  USSSU 3S9" U5      n[        R                  [        R                  " US5      SU 3S9" U5      n[         R                  " S5         [        UUSSSU 3S9n[        UUSSSU 3S9n[        R                  Xx/SU 3S9n	SSS5        [         R                  " S5         [        R                  SSSS U 3S!9" U5      n
[        UUSSS"U 3S9n[        R                  X/S#U 3S9nSSS5        [         R                  " S$5         [        R                  SSSS%U 3S!9" U5      n[        UUSSS&U 3S9n[        R                  X/S'U 3S9nSSS5        [         R                  " S(5         [        R                  SSSS)U 3S!9" W	5      n[        R                  WU/5      nSSS5        [         R                  " S*5         [        W	USS)U 3S+9n[        R                  SSSS,U 3S!9" U5      n[        R                  UU/S-U 3S9nSSS5        [        R                  WWWW/US.U 3S/9nUU 4sSSS5        $ ! , (       d  f       GN= f! , (       d  f       GNk= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N~= f! , (       d  f       g= f)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 TF-Keras tensor
r   r   r   reduction_A_block_r3   r   r   reduction_conv_1_Fr"   r   r(   r)   reduction_bn_1_r+   r   reduction_pad_1_r   r   r   r   reduction_left1_)r#   r1   )   r   reduction_right1_reduction_add_1_r9   Nr   r   r    reduction_left2_r   reduction_right2_reduction_add_2_r   reduction_left3_reduction_right3_reduction_add3_r   reduction_left4_r   r0   reduction_right5_reduction_add4_reduction_concat_r   )r   rK   r   r   rO   rW   rR   rS   r   r   r   r   r   MaxPooling2Dr   r   )r   rt   rr   r1   rq   r   h3r   r   r   r   r   r   x3_1x3_2r   r   x5_1x5_2r   rs   s                        rz   rT   rT     s    0026FF!BK			0
;	<!3f%b)MM$XJ/*  
  %%"8*-	 & 

  !!"..q!4#H:. " 
 
 	*(+H:6D ),XJ7D TL1A(/LMB +" 	*&&'z2	 ' 
 D ),XJ7D TL1A(/LMB +  	***'z2	 + 
 D ),XJ7D TL
/KLB +  	*(('z2	 ) 
 B RH%B + 	*(GV0@
.KD &&(
3	 ' 
 D T4L
/KLB + R$XJ/  

 "uG 
=	<0 +*" +*  +*  +* +*e 
=	<s   B1L1(9K!L1?AK+L1%AK=-L17LL1 AL ('L1
K(	#L1+
K:	5L1=
L	L1
L	L1 
L.	*L11
L?z*keras.applications.nasnet.preprocess_inputc                 ,    [         R                  " XSS9$ )NrB   )r   mode)r   preprocess_input)rs   r   s     rz   r   r     s    **	 r{   z,keras.applications.nasnet.decode_predictionsc                 *    [         R                  " XS9$ )N)top)r   decode_predictions)predsr   s     rz   r   r     s    ,,U<<r{    )r   reterror)Nr   r   r   Tr   Tr   NNr   Nsoftmax)NTr   NNr   r   )r   r   N)N)r   )(__doc__tensorflow.compat.v2compatv2rB   tf_keras.srcr   tf_keras.src.applicationsr   tf_keras.src.enginer   tf_keras.src.layersr   tf_keras.src.utilsr   r   tensorflow.python.platformr	   rL    tensorflow.python.util.tf_exportr
   BASE_WEIGHTS_PATHr_   r`   rb   rc   rO   r8   r   r   r   r   rV   rT   r   r   PREPROCESS_INPUT_DOCformatPREPROCESS_INPUT_RET_DOC_TFPREPROCESS_INPUT_ERROR_DOC r{   rz   <module>r     s   0 " !   4 ( 2 ) * = 9 K  .0BB #47P#P  ,/@@ "36N"N 		 #bJ	 ,.O #SSl +-M #SSn ?C9xYxZzqh :; < <== >= *>>EE	22

3
3 F   
 ,>>FF  r{   