
    &VfA                        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d Zd Zd Z	 	 	 	 	 	 	 d*dZ eddg          	 	 	 	 	 	 	 d*d            Z eddg          	 	 	 	 	 	 	 d*d            Z eddg          	 	 	 	 	 	 	 d*d             Z ed!          d+d"            Z ed#          d,d%            Zej                            d&ej        ej         '          e_!        ej        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              dS )-    )backend)layers)keras_export)imagenet_utils)
Functional)operation_utils)
file_utilszFhttps://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           
      z    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       \/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/applications/densenet.pydense_blockr   #   sI     6]] A Aq"4(?SQZZ#?@@@H    c                    t          j                    dk    rdnd} t          j        |d|dz             |           }  t          j        d|dz   	          |           }  t          j        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_formatr   BatchNormalization
ActivationConv2DintshapeAveragePooling2D)r   	reductionr   bn_axiss       r   transition_blockr9   3   s     ,../AAaaqG	!hTE\	 	 			 		A 	7&tg~666q99A	AGGy())	G^		 	 	
 		 		A 	C14'>BBB1EEAHr   c           	      0   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   r   r1   r2   r3   Concatenate)r   growth_rater   r8   x1s        r   r   r   M   sr    ,../AAaaqG
	"hTG^
 
 

	 
	B 
:	6y(8	9	9	9"	=	=B
	KU	1A
 
 


 

B
	"hTG^
 
 


 

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

 

B 	@dY.>???BHHAHr   TimagenetN  softmaxc                 z	   t          j                    dk    rt          d          |dv s#t          j        |          st          d          |dk    r|r|dk    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          |
          }
|rT t          j        d,          |
          }
t          j        ||            t          j        ||d-.          |
          }
nI|d/k    r t          j        d,          |
          }
n$|d0k    r t          j        d1          |
          }
|t+          j        |          }n|}| g d2k    rt/          ||
d3          }nH| g d4k    rt/          ||
d5          }n-| g d6k    rt/          ||
d7          }nt/          ||
d8          }|dk    r|rr| g d2k    rt          j        d9t2          d:d;<          }n| g d4k    rt          j        d=t4          d:d><          }n| g d6k    rt          j        d?t6          d:d@<          }nq| g d2k    rt          j        dAt8          d:dB<          }nK| g d4k    rt          j        dCt:          d:dD<          }n%| g d6k    rt          j        dEt<          d:dF<          }|                    |           n||                    |           |S )Ga  Instantiates the DenseNet architecture.

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

    This function returns a 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 Keras Application expects a specific kind of input preprocessing.
    For DenseNet, call `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 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 model instance.
    channels_firstzDenseNet does not support the `channels_first` image data format. Switch to `channels_last` by editing your local config file at ~/.keras/keras.json>   NrH   zThe `weights` argument should be either `None` (random initialization), `imagenet` (pre-training on ImageNet), or the path to the weights file to be loaded.rH   rI   zWIf using `weights` as `"imagenet"` with `include_top` as true, `classes` should be 1000   r   )default_sizemin_sizedata_formatrequire_flattenweightsN)r5   )tensorr5   r    r!   r   )r!   r!   rT   )rC   @      r,   F
conv1_conv)r/   r+   r   r"   conv1_bnr$   r'   
conv1_relur   )r   r   rZ   pool1r.   r   conv2g      ?pool2conv3pool3conv4pool4conv5bnavg_poolpredictions)
activationr   avgmaxmax_pool            densenet121rk   rl   r   r   densenet169rk   rl   0   r   densenet201densenetr
   models 9d60b8095a5708f2dcce2bca79d332c7)cache_subdir	file_hashr    d699b8f76981ab1b30698df4c175e90br    1ceb130c1ea1b78c3bf6114dbdfd8807r    30ee3e1110167f948a6b9946edeeb738r    b8c4d4c20dd625c148057b9ff1c1176br    c13680b51ded0fb44dff2d8f86ac8bb1) r   r0   
ValueErrorr	   existsr   obtain_input_shaper   Inputis_keras_tensorZeroPadding2Dr3   r1   r2   MaxPooling2Dr   r9   GlobalAveragePooling2Dvalidate_activationDenseGlobalMaxPooling2Dr   get_source_inputsr   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_toprR   input_tensorinput_shapepoolingclassesclassifier_activation	img_inputr8   r   inputsmodelweights_paths                 r   DenseNetr   k   s   X  ""&6661
 
 	

 )))Z->w-G-G)<
 
 	
 *D1
 
 	
 !3-//#  K L{333		&|44 	%LLLLII$I,../AAaaqG6%5666yAAAJb!Q\JJJ1MMA	!hZ	 	 			 		A 	5&|444Q77A6%5666q99A7Aqw777::AAvayw///ACg...AAvayw///ACg...AAvayw///ACg...AAvayw///AL!wtLLLQOOA.&v...q11A >:F)z:::1==*+@'JJJ
FL 5M
 
 

  e>-:>>>qAAAA:)z:::1==A  2<@@   61=999	???	"	"61=999	???	"	"61=99961:666 * +	(()2G+!)@	      ???**)2G+!)@	      ???**)2G+!)@	      (()2M2!)@	      ???**)2M2!)@	      ???**)2M2!)@	      	<((((		7###Lr   z'keras.applications.densenet.DenseNet121zkeras.applications.DenseNet121c           
      2    t          g d| ||||||          S )z*Instantiates the Densenet121 architecture.rj   r   r   rR   r   r   r   r   r   s          r   DenseNet121r   F  2      	 	 	r   z'keras.applications.densenet.DenseNet169zkeras.applications.DenseNet169c           
      2    t          g d| ||||||          S )z*Instantiates the Densenet169 architecture.rp   r   r   s          r   DenseNet169r   b  r   r   z'keras.applications.densenet.DenseNet201zkeras.applications.DenseNet201c           
      2    t          g d| ||||||          S )z*Instantiates the Densenet201 architecture.rr   r   r   s          r   DenseNet201r   ~  r   r   z,keras.applications.densenet.preprocess_inputc                 0    t          j        | |d          S )Ntorch)rP   mode)r   preprocess_input)r   rP   s     r   r   r     s#    *	{   r   z.keras.applications.densenet.decode_predictions   c                 .    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 Keras config at `~/.keras/keras.json`.

Note: each Keras Application expects a specific kind of input preprocessing.
For DenseNet, call `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 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__)TrH   NNNrI   rJ   )N)r   )$	keras.srcr   r   keras.src.api_exportr   keras.src.applicationsr   keras.src.modelsr   keras.src.opsr   keras.src.utilsr	   BASE_WEIGHTS_PATHr   r   r   r   r   r   r   r9   r   r   r   r   r   r   r   PREPROCESS_INPUT_DOCformatPREPROCESS_INPUT_RET_DOC_TORCHPREPROCESS_INPUT_ERROR_DOCr   DOCsetattr r   r   <module>r      sI               - - - - - - 1 1 1 1 1 1 ' ' ' ' ' ' ) ) ) ) ) ) & & & & & & M  KK  ?@ 
 KK  ?@ 
 KK  ?@      4  @ #X X X Xv 1(  #   , 1(  #   , 1(  #   , <==   >= >??= = = @?= *>EE	5

3 F    
 ,>F  5n Y 3c 9 : : : Y 3c 9 : : : Y 3c 9 : : : : :r   