o
    ?e                     @   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)math_ops)	optimizer)training_ops)	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_rateZinitial_accumulator_valuel1_regularization_strengthl2_regularization_strengthuse_lockingname	__class__ l/home/www/facesmatcher.com/pyenv/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   Zcolocate_withr   Zconstantr   	get_shaper"   Z
base_dtypeZ_get_or_make_slot_name)r   Z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   Z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   Z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 r*   )r+   r   Zresource_apply_proximal_adagradhandler   r   r   r,   r-   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 r*   )	r+   r   Zsparse_apply_proximal_adagradr   r   r   valuesindicesr,   r-   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 r*   )r+   r   Z&resource_sparse_apply_proximal_adagradr2   r   castr   r"   r   r   r,   )r   r.   r/   r5   r0   r   r   r    _resource_apply_sparses   s   z/ProximalAdagradOptimizer._resource_apply_sparse)r
   r   r   Fr   )__name__
__module____qualname____doc__r   r(   r)   r1   r3   r6   r8   __classcell__r   r   r   r    r	      s    !
	r	   N)r<   Ztensorflow.python.frameworkr   r   Ztensorflow.python.opsr   Ztensorflow.python.trainingr   r   Z tensorflow.python.util.tf_exportr   Z	Optimizerr	   r   r   r   r    <module>   s   
