o
    "j                     @   sD   d dl Z d dlmZ d dlmZ ddlmZ g ZG dd deZdS )    N)LarsMomentumOptimizer)Momentum   )MetaOptimizerBasec                       sn   e Zd Z fddZ fddZdd Zdd Zd	d
 Z				dddZdd Z	dd Z
	dddZ  ZS )LarsOptimizerc                    s(   t  | || _d | _g | _g | _d S N)super__init__	inner_optlars_optZmeta_optimizers_white_listZmeta_optimizers_black_list)selfZ	optimizer	__class__ x/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/fleet/meta_optimizers/lars_optimizer.pyr	      s
   
zLarsOptimizer.__init__c                    sl   t  |||| | j}t|tsd S | jj}t|j|j	|d |d |j
|j|j|j|d |d d
| _d S )N
lars_coefflars_weight_decayexclude_from_weight_decayepsilon)
Zlearning_rateZmomentumr   r   parameter_listregularizationZ	grad_clipnamer   r   )r   _set_basic_infor
   
isinstancer   user_defined_strategylars_configsr   Z_learning_rateZ	_momentumZ_parameter_listr   Z
_grad_clip_namer   )r   loss
role_makerZuser_defined_optimizerr   optZconfigsr   r   r   r   !   s&   
zLarsOptimizer._set_basic_infoc                 C   s@   | j jsdS | jjrt| jtstd	| jj
 dS dS dS )NFzBlars need the inner optimizer to be Momentum optimizer but got {}.T)r   Z_is_collectiver   larsr   r
   r   loggingwarnformattype)r   r   r   r   
_can_apply;   s   zLarsOptimizer._can_applyc                 C   s   d|_ i |_d S )NFr    r   )r   dist_strategyr   r   r   _disable_strategyJ   s   
zLarsOptimizer._disable_strategyc                 C   s   d|_ ddd|_d S )NTg{Gz?gMb@?)r   r   r&   )r   r'   contextr   r   r   _enable_strategyN   s   zLarsOptimizer._enable_strategyNc                 C   s   | j |||||S r   )r   backward)r   r   startup_programr   no_grad_set	callbacksr   r   r   r+   U   s   
zLarsOptimizer.backwardc                 C   s   | j j|dS )N)params_grads)r   apply_gradients)r   r/   r   r   r   r0   b   s   zLarsOptimizer.apply_gradientsc                 C   s   | j j|||dS )N)r,   r/   )r   Z_apply_optimize)r   r   r,   r/   r   r   r   apply_optimizee   s   zLarsOptimizer.apply_optimizec                 C   s   | j ||||\}}||fS r   )r   Zminimize)r   r   r,   r   r-   Zoptimize_opsr/   r   r   r   minimize_implj   s   zLarsOptimizer.minimize_impl)NNNN)NNN)__name__
__module____qualname__r	   r   r%   r(   r*   r+   r0   r1   r2   __classcell__r   r   r   r   r      s    

r   )	r!   Zpaddle.incubate.optimizerr   Zpaddle.optimizerr   Zmeta_optimizer_baser   __all__r   r   r   r   r   <module>   s   