o
    i eC                     @   s  d Z ddlm  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ed Zed Zed Zed Zed Ze Zdd Zdd Zdd Z							d4ddZedd							d4dd Zed!d"							d4d#d$Zed%d&							d4d'd(Z ed)d5d*d+Z!ed,d6d.d/Z"ej#j$d0ej%ej&d1e!_ ej"j e"_ d2Z'e(ed3ej e'  e(ed3ej e'  e(e d3e j e'  dS )7zDenseNet models for 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                 C   s0   t |D ]}t| d|d t|d  d} q| 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   i r   N/var/www/myenv/lib/python3.10/site-packages/keras/src/applications/densenet.pydense_block?   s    r   c                 C   s   t  dkrdnd}tj|d|d d| } tjd|d d	| } tjtt | | | dd
|d d| } tjdd|d d| } | 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_axisr   r   r   transition_blockO   s"   
r7   c                 C   s   t  dkrdnd}tj|d|d d| }tjd|d d	|}tjd
| dd|d d|}tj|d|d d|}tjd|d d	|}tj|ddd|d d|}tj||d d| |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   r-   r.   r/   r0   r1   Concatenate)r   growth_rater   r6   x1r   r   r   r   i   s2   

r   Timagenet  softmaxc                 C   s  |dv st jj|std|dkr|r|dkrtdtj|ddt ||d}|d	u r5t	j
|d
}nt|sBt	j
||d}n|}t dkrLdnd}	t	jdd|}
t	jdddddd|
}
t	j|	ddd|
}
t	jddd|
}
t	jdd|
}
t	jdddd|
}
t|
| d  d!d}
t|
d"d#d}
t|
| d d$d}
t|
d"d%d}
t|
| d d&d}
t|
d"d'd}
t|
| d d(d}
t	j|	dd)d|
}
t	jddd|
}
|rt	jd*d|
}
t|| t	j||d+d,|
}
n|d-krt	jd*d|
}
n|d.krt	jd/d|
}
|d	urt|}n|}| g d0kr%tj||
d1d}n(| g d2kr5tj||
d3d}n| g d4krEtj||
d5d}ntj||
d6d}|dkr|r| g d0krftjd7td8d9d:}nT| g d2krwtjd;td8d<d:}nC| g d4krtjd=td8d>d:}n2| g d0krtjd?t d8d@d:}n!| g d2krtjdAt!d8dBd:}n| g d4krtjdCt"d8dDd:}|#| |S |d	ur|#| |S )Eaz  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 `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 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.
    >   NrE   zThe `weights` argument should be either `None` (random initialization), `imagenet` (pre-training on ImageNet), or the path to the weights file to be loaded.rE   rF   zWIf using `weights` as `"imagenet"` with `include_top` as true, `classes` should be 1000   r   )default_sizemin_sizedata_formatrequire_flattenweightsN)shape)tensorrN   r   r   r   )r   r   rP   )r@   @      r)   Fz
conv1/conv)r,   r(   r   r   zconv1/bnr!   r$   z
conv1/relur   )r   r   rS   pool1r+   r   conv2g      ?pool2conv3pool3conv4pool4conv5bnavg_poolpredictions)
activationr   avgmaxmax_pool            densenet121rd   re   r   r   densenet169rd   re   0   r   densenet201densenetr	   models 9d60b8095a5708f2dcce2bca79d332c7)cache_subdir	file_hashr    d699b8f76981ab1b30698df4c175e90br    1ceb130c1ea1b78c3bf6114dbdfd8807r
    30ee3e1110167f948a6b9946edeeb738r    b8c4d4c20dd625c148057b9ff1c1176br    c13680b51ded0fb44dff2d8f86ac8bb1)$tfiogfileexists
ValueErrorr   obtain_input_shaper   r-   r.   Inputis_keras_tensorZeroPadding2Dr1   r/   r0   MaxPooling2Dr   r7   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_toprM   input_tensorinput_shapepoolingclassesclassifier_activation	img_inputr6   r   inputsmodelweights_pathr   r   r   DenseNet   s   I	






r   z'keras.applications.densenet.DenseNet121zkeras.applications.DenseNet121c              	   C      t g d| ||||||S )z*Instantiates the Densenet121 architecture.rc   r   r   rM   r   r   r   r   r   r   r   r   DenseNet121Y     r   z'keras.applications.densenet.DenseNet169zkeras.applications.DenseNet169c              	   C   r   )z*Instantiates the Densenet169 architecture.ri   r   r   r   r   r   DenseNet169r  r   r   z'keras.applications.densenet.DenseNet201zkeras.applications.DenseNet201c              	   C   r   )z*Instantiates the Densenet201 architecture.rk   r   r   r   r   r   DenseNet201  r   r   z,keras.applications.densenet.preprocess_inputc                 C   s   t j| |ddS )Ntorch)rK   mode)r   preprocess_input)r   rK   r   r   r   r     s   r   z.keras.applications.densenet.decode_predictions   c                 C   s   t j| |dS )N)top)r   decode_predictions)predsr   r   r   r   r     s   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 `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 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__)TrE   NNNrF   rG   )N)r   ))r   tensorflow.compat.v2compatv2rx   	keras.srcr   keras.src.applicationsr   keras.src.enginer   keras.src.layersr   keras.src.utilsr   r    tensorflow.python.util.tf_exportr   BASE_WEIGHTS_PATHr   r   r   r   r   r   r.   r   r7   r   r   r   r   r   r   r   PREPROCESS_INPUT_DOCformatPREPROCESS_INPUT_RET_DOC_TORCHPREPROCESS_INPUT_ERROR_DOCDOCsetattrr   r   r   r   <module>   s    
 S
5