o
    ?e                     @   sb   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	 e	dgdG d	d
 d
ej
ZdS )z'ProximalGradientDescent for TensorFlow.    )ops)math_ops)	optimizer)training_ops)	tf_exportz&train.ProximalGradientDescentOptimizer)v1c                       sP   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	  Z
S ) ProximalGradientDescentOptimizeraf  Optimizer that implements the proximal gradient descent algorithm.

  References:
    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ProximalGradientDescentc                    s4   t t| || || _|| _|| _d| _d| _dS )a  Construct a new proximal gradient descent optimizer.

    Args:
      learning_rate: A Tensor or a floating point value.  The learning
        rate to use.
      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 "GradientDescent".
    N)superr   __init___learning_rate_l1_regularization_strength_l2_regularization_strength"_l1_regularization_strength_tensor"_l2_regularization_strength_tensor)selflearning_ratel1_regularization_strengthl2_regularization_strengthuse_lockingname	__class__ u/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/training/proximal_gradient_descent.pyr   %   s   
z)ProximalGradientDescentOptimizer.__init__c                 C   s    t j|| j| j| j|| jdjS N)r   )r   Zapply_proximal_gradient_descent_learning_rate_tensorr   r   _use_lockingopr   gradvarr   r   r   _apply_dense<   s   z-ProximalGradientDescentOptimizer._apply_densec                 C   s    t j|j| j| j| j|| jdS r   )r   Z(resource_apply_proximal_gradient_descenthandler   r   r   r   r    r   r   r   _resource_apply_denseE   s   z6ProximalGradientDescentOptimizer._resource_apply_densec              	   C   s&   t j|| j| j| j|j|j| jdjS r   )	r   Z&sparse_apply_proximal_gradient_descentr   r   r   valuesindicesr   r   r    r   r   r   _apply_sparseN   s   z.ProximalGradientDescentOptimizer._apply_sparsec              	   C   s@   t j|jt| j|jt| j|jt| j|j||| j	dS r   )
r   Z/resource_sparse_apply_proximal_gradient_descentr$   r   castr   Zdtyper   r   r   )r   r!   r"   r'   r   r   r   _resource_apply_sparseX   s   z7ProximalGradientDescentOptimizer._resource_apply_sparsec                 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   _prepareb   s   z)ProximalGradientDescentOptimizer._prepare)r	   r	   Fr
   )__name__
__module____qualname____doc__r   r#   r%   r(   r*   r+   __classcell__r   r   r   r   r      s    		

r   N)r/   Ztensorflow.python.frameworkr   Ztensorflow.python.opsr   Ztensorflow.python.trainingr   r   Z tensorflow.python.util.tf_exportr   Z	Optimizerr   r   r   r   r   <module>   s   
