
    BVh                         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	       G d
 dej                               Zy)zProximalAdagrad for TensorFlow.    )constant_op)ops)gen_training_ops)math_ops)	optimizer)	tf_exportztrain.ProximalAdagradOptimizer)v1c                   N     e Zd ZdZ	 	 	 d	 fd	Zd Zd Zd Zd Zd Z	d Z
 x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))
  c                     |dk  rt        d|z        t        t        |   ||       || _        || _        || _        || _        d| _        d| _	        d| _
        y)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.
            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__s          [/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/training/proximal_adagrad.pyr   z!ProximalAdagradOptimizer.__init__'   so    ( !C'G01 2 2	
"D2;E'D&?D#'AD$'AD$.2D+.2D+!%D    c                 *   |D ]  }t        j                  |      5  t        j                  | j                  |j                         |j                  j                        }d d d        | j                  |d| j                          y # 1 sw Y   *xY w)N)shapedtypeaccumulator)
r   colocate_withr   constantr   	get_shaper$   
base_dtype_get_or_make_slot_name)r   var_listvvals       r    _create_slotsz&ProximalAdagradOptimizer._create_slotsH   s~     @Q =""4#B#B)*)*););== Q]DJJ?@= =s   AB		B	c                     t        j                  | j                  d      | _        t        j                  | j                  d      | _        t        j                  | j                  d      | _        y )Nr   )r   r   r   )r   convert_to_tensorr   r   r   r   r   r   )r   s    r    _preparez!ProximalAdagradOptimizer._prepareP   sa    !$!6!6t7J7J<K"MD.1.C.C(()/+D+ /2.C.C(()/+D+r!   c           	          | j                  |d      }t        j                  ||| j                  | j                  | j
                  || j                        S Nr%   )r   )get_slotr   apply_proximal_adagradr   r   r   _use_lockingr   gradvaraccs       r    _apply_densez%ProximalAdagradOptimizer._apply_denseZ   sO    
--]
+C22S$,,////$++	- -r!   c           	          | j                  |d      }t        j                  |j                  |j                  | j                  | j
                  | j                  || j                        S r4   )r5   r   resource_apply_proximal_adagradhandler   r   r   r7   r8   s       r    _resource_apply_densez.ProximalAdagradOptimizer._resource_apply_denseb   sW    
--]
+C;;

CJJ : :////$++	- -r!   c           
          | j                  |d      }t        j                  ||| j                  | j                  | j
                  |j                  |j                  | j                        S r4   )	r5   r   sparse_apply_proximal_adagradr   r   r   valuesindicesr7   r8   s       r    _apply_sparsez&ProximalAdagradOptimizer._apply_sparsej   sZ    
--]
+C99S$,,////T\\%%' 'r!   c           
         | j                  |d      }t        j                  |j                  |j                  t	        j
                  | j                  |j                        t	        j
                  | j                  |j                        t	        j
                  | j                  |j                        ||| j                        S r4   )r5   r   &resource_sparse_apply_proximal_adagradr?   r   castr   r$   r   r   r7   )r   r9   r:   rD   r;   s        r    _resource_apply_sparsez/ProximalAdagradOptimizer._resource_apply_sparses   s    
--]
+CBB

CJJd00$**=d==tzzJd==tzzJg%%' 'r!   )g?r   r   FProximalAdagrad)__name__
__module____qualname____doc__r   r/   r2   r<   r@   rE   rI   __classcell__)r   s   @r    r   r      s9    	 ?BJM'8&B@+--''r!   r   N)rN   tensorflow.python.frameworkr   r   tensorflow.python.opsr   r   tensorflow.python.trainingr    tensorflow.python.util.tf_exportr   	Optimizerr    r!   r    <module>rV      sI     & 3 + 2 * 0 6 /01a'y22 a' 2a'r!   