o
    8wÖi  ã                   @   s   d Z dd„ ZdS )z_Implements functions to avoid optimizing certain parameters

Authors
 * Titouan Parcollet 2023
c                 C   sX   g }g }|   ¡ D ]\}}|jsqt|jƒdkr| |¡ q| |¡ q|ddœd|igS )a‰  Put vectors in a parameter group without weight decay

    Takes in a list of modules and separates their parameters into two parameter groups,
    which can be passed to a PyTorch Optimizer class. Vector parameters get weight_decay overridden to zero.
    This is particularly useful for biases and norms, which we expect to deviate from zero. Other vectors as parameters are also likely not meant to be pushed toward zero.

    Arguments
    ---------
    modules : torch.ModuleList, torch.Module
        Torch modules to operate on

    Returns
    -------
    list
        The parameter groups in the Pytorch Optimizer specification format.
    é   g        )ÚparamsÚweight_decayr   )Únamed_parametersÚrequires_gradÚlenÚshapeÚappend)ÚmodulesÚdecayÚno_decayÚ_Úparam© r   úY/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/speechbrain/utils/optimizers.pyÚrm_vector_weight_decay   s   þr   N)Ú__doc__r   r   r   r   r   Ú<module>   s    