o
    i0                     @   sB   d Z ddlZddlZddlZddlmZ dejjdefddZ	dS )z/Initialize modules for espnet2 neural networks.    N)check_argument_typesmodelinitc                 C   s  t  sJ |dkr|  D ]z\}}|j}d|v r,| dkr,|  td| d q| dkrE|d}dt	| }|
d| q| dkr^|d}dt	| }|
d| q| d	v r|d}| dd
 D ]}||9 }qqdt	| }|
d| qt|  D ]_}t|tjjr|jj
dd nDt|tjjr|jd}|jj|d |d  d n't|tjjr| D ]\}}	d|v r|	d}|	j|d |d  d qt|dr|  qd
S |  D ]K}| dkr=|dkr	tjj|j q|dkrtjj|j q|dkr'tjjj|jdd q|dkr7tjjj|jdd qtd| q|  D ]\}}d|v r`| dkr`|j  td| d qB|  D ] }
t|
tjjtjjtjj fr{|
!  t|
dr|
  qft"| dd
rt"| j#dd
r| j#$  t"| dd
rt"| j%dd
r| j%$  n.tt"| j%dd
tjj&rt't"| j%dD ]\}}t"| j%j(| dd
r| j%j(| $  qt"| 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.
    chainerz.bias   zInitialize z	 to zerosr   g      ?   )      Nr	   biasespnet_initialization_fnxavier_uniformxavier_normalkaiming_uniformrelu)nonlinearitykaiming_normalzUnknown initialization: encoderreload_pretrained_parametersfrontend	frontendspostencoder)*r   named_parametersdatadimzero_logginginfosizemathsqrtnormal_NotImplementedErrormodules
isinstancetorchnn	EmbeddingweightRNNCellBasebias_ihfill_RNNBasehasattrr   
parametersr   xavier_uniform_xavier_normal_kaiming_uniform_kaiming_normal_
ValueError	LayerNorm	GroupNormreset_parametersgetattrr   r   r   
ModuleList	enumerater   r   )r   r   namepr   nstdvkmodparammi_ rC   R/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/torch_utils/initialize.py
initialize   s   




 








rE   )
__doc__r   r   r$   	typeguardr   r%   ModulestrrE   rC   rC   rC   rD   <module>   s   