
    |hC                        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edz   Zedz   Zedz   Zedz   Zedz   Zedz   Z e       Zd Zd Zd Z	 	 	 	 	 	 	 d&dZ edd      	 	 	 	 	 	 	 d&d       Z edd      	 	 	 	 	 	 	 d&d       Z edd      	 	 	 	 	 	 	 d&d       Z  ed      d'd       Z! ed       d(d!       Z"ejF                  jI                  d"ejJ                  ejL                  #      e!_         ejD                  j                   e"_         d$Z' e(ed%ej                   e'z           e(ed%ej                   e'z           e(e d%e j                   e'z          y))zDenseNet models for TF-Keras.

Reference:
  - [Densely Connected Convolutional Networks](
      https://arxiv.org/abs/1608.06993) (CVPR 2017)
    N)backend)imagenet_utils)training)VersionAwareLayers)
data_utils)layer_utils)keras_exportzFhttps://storage.googleapis.com/tensorflow/keras-applications/densenet/1densenet121_weights_tf_dim_ordering_tf_kernels.h57densenet121_weights_tf_dim_ordering_tf_kernels_notop.h51densenet169_weights_tf_dim_ordering_tf_kernels.h57densenet169_weights_tf_dim_ordering_tf_kernels_notop.h51densenet201_weights_tf_dim_ordering_tf_kernels.h57densenet201_weights_tf_dim_ordering_tf_kernels_notop.h5c           
      f    t        |      D ]"  }t        | d|dz   t        |dz         z         } $ | S )zA dense block.

    Args:
      x: input tensor.
      blocks: integer, the number of building blocks.
      name: string, block label.

    Returns:
      Output tensor for the block.
        _block   name)range
conv_blockstr)xblocksr   is       a/var/www/html/test/engine/venv/lib/python3.12/site-packages/tf_keras/src/applications/densenet.pydense_blockr   ?   s=     6] Aq"4(?SQZ#?@AH    c                    t        j                         dk(  rdnd}t        j                  |d|dz         |       } t        j	                  d|dz   	      |       } t        j                  t        t        j                  |       |   |z        dd
|dz         |       } t        j                  dd|dz         |       } | S )zA transition block.

    Args:
      x: input tensor.
      reduction: float, compression rate at transition layers.
      name: string, block label.

    Returns:
      output tensor for the block.
    channels_last   r   >_bnaxisepsilonr   relu_relur   F_convuse_biasr      _poolstridesr   )	r   image_data_formatlayersBatchNormalization
ActivationConv2Dint	int_shapeAveragePooling2D)r   	reductionr   bn_axiss       r   transition_blockr:   O   s     ,,./AaqG!!hTE\ 	" 			A 	&tg~6q9AGa )I56	G^	 	 	
 		A 	14'>B1EAHr   c           	         t        j                         dk(  rdnd}t        j                  |d|dz         |       }t        j	                  d|dz   	      |      }t        j                  d
|z  dd|dz         |      }t        j                  |d|dz         |      }t        j	                  d|dz   	      |      }t        j                  |ddd|dz         |      }t        j                  ||dz         | |g      } | S )zA building block for a dense block.

    Args:
      x: input tensor.
      growth_rate: float, growth rate at dense layers.
      name: string, block label.

    Returns:
      Output tensor for the block.
    r    r!   r   r"   _0_bnr$   r'   _0_relur      F_1_convr*   _1_bn_1_relusame_2_conv)paddingr+   r   _concat)r%   r   )r   r0   r1   r2   r3   r4   Concatenate)r   growth_rater   r9   x1s        r   r   r   i   s1    ,,./AaqG		"	"hTG^ 
# 

	B 
		6y(8		9"	=B		KU	1A 
 


B 
	"	"hTG^ 
# 


B 
		6y(8		9"	=B	QTI=M 
 


B 	dY.>?BHAHr   c                    |dv s4t         j                  j                  j                  |      st	        d      |dk(  r|r|dk7  rt	        d      t        j                  |ddt        j                         ||      }|t        j                  |	      }n/t        j                  |      st        j                  ||
      }n|}t        j                         dk(  rdnd}	t        j                  d      |      }
t        j                  ddddd      |
      }
t        j                  |	dd      |
      }
t        j                  dd      |
      }
t        j                  d      |
      }
t        j!                  ddd      |
      }
t#        |
| d   d       }
t%        |
d!d"      }
t#        |
| d   d#      }
t%        |
d!d$      }
t#        |
| d   d%      }
t%        |
d!d&      }
t#        |
| d   d'      }
t        j                  |	dd(      |
      }
t        j                  dd      |
      }
|rOt        j'                  d)      |
      }
t        j(                  ||       t        j+                  ||d*+      |
      }
nA|d,k(  rt        j'                  d)      |
      }
n |d-k(  rt        j-                  d.      |
      }
|t/        j0                  |      }n|}| g d/k(  rt3        j4                  ||
d0      }nX| g d1k(  rt3        j4                  ||
d2      }n8| g d3k(  rt3        j4                  ||
d4      }nt3        j4                  ||
d5      }|dk(  r|ro| g d/k(  rt7        j8                  d6t:        d7d89      }n| g d1k(  rt7        j8                  d:t<        d7d;9      }n| g d3k(  rt7        j8                  d<t>        d7d=9      }nn| g d/k(  rt7        j8                  d>t@        d7d?9      }nI| g d1k(  rt7        j8                  d@tB        d7dA9      }n$| g d3k(  rt7        j8                  dBtD        d7dC9      }|jG                         |S ||jG                  |       |S )Da  Instantiates the DenseNet architecture.

    Reference:
    - [Densely Connected Convolutional Networks](
        https://arxiv.org/abs/1608.06993) (CVPR 2017)

    This function returns a TF-Keras image classification model,
    optionally loaded with weights pre-trained on ImageNet.

    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 DenseNet, call
    `tf.keras.applications.densenet.preprocess_input` on your inputs before
    passing them to the model. `densenet.preprocess_input` will scale pixels
    between 0 and 1 and then will normalize each channel with respect to the
    ImageNet dataset statistics.

    Args:
      blocks: numbers of building blocks for the four dense layers.
      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 TF-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.
    >   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.rJ     zWIf using `weights` as `"imagenet"` with `include_top` as true, `classes` should be 1000   r   )default_sizemin_sizedata_formatrequire_flattenweights)shape)tensorrR   r    r!   r   )r!   r!   rT   )rD   @      r,   Fz
conv1/conv)r/   r+   r   r"   zconv1/bnr$   r'   z
conv1/relur   )r   r   rW   pool1r.   r   conv2g      ?pool2conv3pool3conv4pool4conv5bnavg_poolpredictions)
activationr   avgmaxmax_pool            densenet121rh   ri   r   r   densenet169rh   ri   0   r   densenet201densenetr
   models 9d60b8095a5708f2dcce2bca79d332c7)cache_subdir	file_hashr    d699b8f76981ab1b30698df4c175e90br    1ceb130c1ea1b78c3bf6114dbdfd8807r    30ee3e1110167f948a6b9946edeeb738r    b8c4d4c20dd625c148057b9ff1c1176br    c13680b51ded0fb44dff2d8f86ac8bb1)$tfiogfileexists
ValueErrorr   obtain_input_shaper   r0   r1   Inputis_keras_tensorZeroPadding2Dr4   r2   r3   MaxPooling2Dr   r:   GlobalAveragePooling2Dvalidate_activationDenseGlobalMaxPooling2Dr   get_source_inputsr   Modelr   get_fileDENSENET121_WEIGHT_PATHDENSENET169_WEIGHT_PATHDENSENET201_WEIGHT_PATHDENSENET121_WEIGHT_PATH_NO_TOPDENSENET169_WEIGHT_PATH_NO_TOPDENSENET201_WEIGHT_PATH_NO_TOPload_weights)r   include_toprQ   input_tensorinput_shapepoolingclassesclassifier_activation	img_inputr9   r   inputsmodelweights_paths                 r   DenseNetr      s^   T ))RUU[[-?-?-H<
 	
 *D1
 	
 !33--/#K LL{L3	&&|4LLI$I,,./AaqG%56yAAb!Q\J1MA!!hZ 	" 			A 	&|4Q7A%56q9AAqw7:AAvayw/ACg.AAvayw/ACg.AAvayw/ACg.AAvayw/A!!wt!LQOA&v.q1A))z):1=**+@'JLL 5M  

 e--:->qAA))z):1=A ..|<  vq}=	?	"vq}=	?	"vq}=vqz: *()22G+!)@	  ?*)22G+!)@	  ?*)22G+!)@	  ()22M2!)@	  ?*)22M2!)@	  ?*)22M2!)@	  	<( L 
	7#Lr   z'keras.applications.densenet.DenseNet121zkeras.applications.DenseNet121c           
      *    t        g d| ||||||      S )z*Instantiates the Densenet121 architecture.rg   r   r   rQ   r   r   r   r   r   s          r   DenseNet121r   Z  )     	 	r   z'keras.applications.densenet.DenseNet169zkeras.applications.DenseNet169c           
      *    t        g d| ||||||      S )z*Instantiates the Densenet169 architecture.rm   r   r   s          r   DenseNet169r   s  r   r   z'keras.applications.densenet.DenseNet201zkeras.applications.DenseNet201c           
      *    t        g d| ||||||      S )z*Instantiates the Densenet201 architecture.ro   r   r   s          r   DenseNet201r     r   r   z,keras.applications.densenet.preprocess_inputc                 2    t        j                  | |d      S )Ntorch)rO   mode)r   preprocess_input)r   rO   s     r   r   r     s    **	{ r   z.keras.applications.densenet.decode_predictionsc                 0    t        j                  | |      S )N)top)r   decode_predictions)predsr   s     r   r   r     s    ,,U<<r    )r   reterrora	  

  Reference:
  - [Densely Connected Convolutional Networks](
      https://arxiv.org/abs/1608.06993) (CVPR 2017)

  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 DenseNet, call
  `tf.keras.applications.densenet.preprocess_input` on your inputs before
  passing them to the model.

  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 TF-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 TF-Keras model instance.
__doc__)TrJ   NNNrK   softmax)N)   ))r   tensorflow.compat.v2compatv2r|   tf_keras.srcr   tf_keras.src.applicationsr   tf_keras.src.enginer   tf_keras.src.layersr   tf_keras.src.utilsr   r    tensorflow.python.util.tf_exportr	   BASE_WEIGHTS_PATHr   r   r   r   r   r   r1   r   r:   r   r   r   r   r   r   r   PREPROCESS_INPUT_DOCformatPREPROCESS_INPUT_RET_DOC_TORCHPREPROCESS_INPUT_ERROR_DOCDOCsetattr r   r   <module>r      sI    " !   4 ( 2 ) * : M  KK  ?@ 
 KK  ?@ 
 KK  ?@ 
 
	 4@ #Pf -/O #, -/O #, -/O #, <= > >?= @= *>>EE	55

3
3 F   
 ,>>FF  4l Y 3 3c 9 : Y 3 3c 9 : Y 3 3c 9 :r   