o
    2h                     @   sb   d dl mZ d dl mZ d dlmZ d dlmZ edgG dd dejZej	
deje_	d	S )
    )initializers)ops)keras_export)	optimizerzkeras.optimizers.Adagradc                       s\   e Zd ZdZ													d fd	d
	Z fddZdd Z fddZ  ZS )Adagradaq  Optimizer that implements the Adagrad algorithm.

    Adagrad is an optimizer with parameter-specific learning rates,
    which are adapted relative to how frequently a parameter gets
    updated during training. The more updates a parameter receives,
    the smaller the updates.

    Args:
        learning_rate: A float, a
            `keras.optimizers.schedules.LearningRateSchedule` instance, or
            a callable that takes no arguments and returns the actual value to
            use. The learning rate. Defaults to `0.001`. Note that `Adagrad`
            tends to benefit from higher initial learning rate values compared
            to other optimizers. To match the exact form in the original paper,
            use `1.0`.
        initial_accumulator_value: Floating point value. Starting value for the
            accumulators (per-parameter momentum values). Must be non-negative.
        epsilon: Small floating point value for maintaining numerical stability.
        {{base_optimizer_keyword_args}}

    Reference:

    - [Duchi et al., 2011](
        http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf).
    MbP?皙?Hz>NFGz?adagradc                    s:   t  jd|||||||	|
|||d| || _|| _d S )N)learning_rateweight_decayclipnorm	clipvalueglobal_clipnormuse_emaema_momentumema_overwrite_frequencyloss_scale_factorgradient_accumulation_stepsname )super__init__initial_accumulator_valueepsilon)selfr   r   r   r   r   r   r   r   r   r   r   r   r   kwargs	__class__r   W/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/optimizers/adagrad.pyr   #   s"   
zAdagrad.__init__c                    s8   | j rd S t | t| j}| j|d|d| _d S )Naccumulator)initializer)builtr   buildr   Constantr   add_optimizer_variables_accumulators)r   var_listr"   r   r   r    r$   E   s   zAdagrad.buildc                 C   sn   t ||j}t ||j}| j| | }| |t | | |t t 	||t 
t || j dS )z=Update step given gradient and the associated model variable.N)r   castdtyper'   _get_variable_index
assign_addsquare
assign_subdividemultiplysqrtaddr   )r   gradientvariabler   lrr!   r   r   r    update_stepN   s   
zAdagrad.update_stepc                    s"   t   }|| j| jd |S )N)r   r   )r   
get_configupdater   r   )r   configr   r   r    r7   ^   s   
zAdagrad.get_config)r   r   r	   NNNNFr
   NNNr   )	__name__
__module____qualname____doc__r   r$   r6   r7   __classcell__r   r   r   r    r      s&    "	r   z{{base_optimizer_keyword_args}}N)	keras.srcr   r   keras.src.api_exportr   keras.src.optimizersr   	Optimizerr   r=   replacebase_optimizer_keyword_argsr   r   r   r    <module>   s    b
