o
    2h                     @   sn   d 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
 e
dgd	G d
d dejZdS )zProximalAdagrad for TensorFlow.    )constant_op)ops)gen_training_ops)math_ops)	optimizer)	tf_exportztrain.ProximalAdagradOptimizer)v1c                       sX   e Zd ZdZ			d fdd	Zdd	 Zd
d Zdd Zdd Zdd Z	dd Z
  ZS )ProximalAdagradOptimizera=  Optimizer that implements the Proximal Adagrad algorithm.

  References:
    Adaptive Subgradient Methods for Online Learning and Stochastic Optimization:
      [Duchi et al., 2011](http://jmlr.org/papers/v12/duchi11a.html)
      ([pdf](http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf))
    Efficient Learning using Forward-Backward Splitting:
      [Duchi et al., 2009](http://papers.nips.cc/paper/3793-efficient-learning-using-forward-backward-splitting)
      ([pdf](http://papers.nips.cc/paper/3793-efficient-learning-using-forward-backward-splitting.pdf))
  皙?        FProximalAdagradc                    sT   |dkr
t d| tt| || || _|| _|| _|| _d| _d| _	d| _
dS )a  Construct a new ProximalAdagrad optimizer.

    Args:
      learning_rate: A `Tensor` or a floating point value.  The learning rate.
      initial_accumulator_value: A floating point value.
        Starting value for the accumulators, must be positive.
      l1_regularization_strength: A float value, must be greater than or
        equal to zero.
      l2_regularization_strength: A float value, must be greater than or
        equal to zero.
      use_locking: If `True` use locks for update operations.
      name: Optional name prefix for the operations created when applying
        gradients.  Defaults to "Adagrad".

    Raises:
      ValueError: If the `initial_accumulator_value` is invalid.
    r   z.initial_accumulator_value must be positive: %sN)
ValueErrorsuperr	   __init___learning_rate_initial_accumulator_value_l1_regularization_strength_l2_regularization_strength"_l1_regularization_strength_tensor"_l2_regularization_strength_tensor_learning_rate_tensor)selflearning_rateinitial_accumulator_valuel1_regularization_strengthl2_regularization_strengthuse_lockingname	__class__ f/var/www/html/chatgem/venv/lib/python3.10/site-packages/tensorflow/python/training/proximal_adagrad.pyr   '   s   
z!ProximalAdagradOptimizer.__init__c              	   C   sd   |D ]-}t | tj| j| |jjd}W d    n1 s!w   Y  | ||d| j	 qd S )N)shapedtypeaccumulator)
r   colocate_withr   constantr   	get_shaper#   
base_dtype_get_or_make_slot_name)r   var_listvvalr    r    r!   _create_slotsH   s   z&ProximalAdagradOptimizer._create_slotsc                 C   s:   t j| jdd| _t j| jdd| _t j| jdd| _d S )Nr   )r   r   r   )r   convert_to_tensorr   r   r   r   r   r   )r   r    r    r!   _prepareP   s   z!ProximalAdagradOptimizer._preparec              	   C   s,   |  |d}tj||| j| j| j|| jdS Nr$   )r   )get_slotr   apply_proximal_adagradr   r   r   _use_lockingr   gradvaraccr    r    r!   _apply_denseZ   s   z%ProximalAdagradOptimizer._apply_densec              	   C   s0   |  |d}tj|j|j| j| j| j|| jdS r1   )r2   r   resource_apply_proximal_adagradhandler   r   r   r4   r5   r    r    r!   _resource_apply_denseb   s   z.ProximalAdagradOptimizer._resource_apply_densec              
   C   s2   |  |d}tj||| j| j| j|j|j| jdS r1   )	r2   r   sparse_apply_proximal_adagradr   r   r   valuesindicesr4   r5   r    r    r!   _apply_sparsej   s   z&ProximalAdagradOptimizer._apply_sparsec              
   C   sP   |  |d}tj|j|jt| j|jt| j|jt| j	|j||| j
dS r1   )r2   r   &resource_sparse_apply_proximal_adagradr;   r   castr   r#   r   r   r4   )r   r6   r7   r?   r8   r    r    r!   _resource_apply_sparses   s   z/ProximalAdagradOptimizer._resource_apply_sparse)r
   r   r   Fr   )__name__
__module____qualname____doc__r   r.   r0   r9   r<   r@   rC   __classcell__r    r    r   r!   r	      s    !
	r	   N)rG   tensorflow.python.frameworkr   r   tensorflow.python.opsr   r   tensorflow.python.trainingr    tensorflow.python.util.tf_exportr   	Optimizerr	   r    r    r    r!   <module>   s   
