o
    ir                     @   s.   d Z ddlZddlZdejjdefddZdS )z/Initialize modules for espnet2 neural networks.    Nmodelinitc                 C   sR  |   D ]F}| dkrJ|dkrtjj|j q|dkr&tjj|j q|dkr5tjjj|jdd q|dkrDtjjj	|jdd qt
d| q|   D ]}| dkr\|j  qO|  D ]}t|tjjtjjtjjfru|  t|d	r~|  qat| d
drt| jddr| j  t| ddrt| jddr| j  dS dS dS )aQ  Initialize weights of a neural network module.

    Parameters are initialized using the given method or distribution.

    Custom initialization routines can be implemented into submodules
    as function `espnet_initialization_fn` within the custom module.

    Args:
        model: Target.
        init: Method of initialization.
       xavier_uniformxavier_normalkaiming_uniformrelu)nonlinearitykaiming_normalzUnknown initialization: espnet_initialization_fnencoderNreload_pretrained_parametersfrontend)
parametersdimtorchnnr   xavier_uniform_dataxavier_normal_kaiming_uniform_kaiming_normal_
ValueErrorzero_modules
isinstance	Embedding	LayerNorm	GroupNormreset_parametershasattrr   getattrr   r   r   )r   r   pm r$   Q/home/ubuntu/.local/lib/python3.10/site-packages/funasr/train_utils/initialize.py
initialize	   s>   


r&   )__doc__mathr   r   Modulestrr&   r$   r$   r$   r%   <module>   s   