o
    2h                     @   s@   d dl mZ d dlmZ d dlmZ edG dd deZdS )    )backend)keras_export)Layerzkeras.layers.Dropoutc                       s@   e Zd ZdZd fdd	ZdddZdd	 Z fd
dZ  ZS )DropoutaB  Applies dropout to the input.

    The `Dropout` layer randomly sets input units to 0 with a frequency of
    `rate` at each step during training time, which helps prevent overfitting.
    Inputs not set to 0 are scaled up by `1 / (1 - rate)` such that the sum over
    all inputs is unchanged.

    Note that the `Dropout` layer only applies when `training` is set to `True`
    in `call()`, such that no values are dropped during inference.
    When using `model.fit`, `training` will be appropriately set to `True`
    automatically. In other contexts, you can set the argument explicitly
    to `True` when calling the layer.

    (This is in contrast to setting `trainable=False` for a `Dropout` layer.
    `trainable` does not affect the layer's behavior, as `Dropout` does
    not have any variables/weights that can be frozen during training.)

    Args:
        rate: Float between 0 and 1. Fraction of the input units to drop.
        noise_shape: 1D integer tensor representing the shape of the
            binary dropout mask that will be multiplied with the input.
            For instance, if your inputs have shape
            `(batch_size, timesteps, features)` and
            you want the dropout mask to be the same for all timesteps,
            you can use `noise_shape=(batch_size, 1, features)`.
        seed: A Python integer to use as random seed.

    Call arguments:
        inputs: Input tensor (of any rank).
        training: Python boolean indicating whether the layer should behave in
            training mode (adding dropout) or in inference mode (doing nothing).
    Nc                    sp   t  jdi | d|  krdksn td| || _|| _|| _|dkr/tj|| _	d| _
|   d S )Nr      zcInvalid value received for argument `rate`. Expected a float value between 0 and 1. Received: rate=T )super__init__
ValueErrorrateseednoise_shaper   randomSeedGeneratorseed_generatorsupports_masking_build_at_init)selfr   r   r   kwargs	__class__r   b/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/layers/regularization/dropout.pyr	   )   s   zDropout.__init__Fc                 C   s,   |r| j dkrtjj|| j | j| jdS |S )Nr   )r   r   )r   r   r   dropoutr   r   )r   inputstrainingr   r   r   call:   s   zDropout.callc                 C   s   |S )Nr   )r   input_shaper   r   r   compute_output_shapeD   s   zDropout.compute_output_shapec                    s(   t   }| j| j| jd}i ||S )N)r   r   r   )r   
get_configr   r   r   )r   base_configconfigr   r   r   r   G   s   
zDropout.get_config)NN)F)	__name__
__module____qualname____doc__r	   r   r   r   __classcell__r   r   r   r   r      s    !

r   N)	keras.srcr   keras.src.api_exportr   keras.src.layers.layerr   r   r   r   r   r   <module>   s
    