
    ^j                     T   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
  ej                  e      Zdedee   defd	Z	 	 	 	 	 dd
ej"                  dee   dedee   dee   defdZd ZddZeZ	 	 	 	 	 	 	 	 	 dd
ej"                  dedee   dee   dededededee   defdZy)    N)islice)
CollectionOptional)nn)group_parametersnamepatternsreturnc                 ,     t         fd|D              S )zACheck if parameter name matches any pattern (supports wildcards).c              3   J   K   | ]  }t        j                   |        y wN)fnmatch).0patternr   s     c/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/optim/_param_groups.py	<genexpr>z#_matches_pattern.<locals>.<genexpr>   s     F'wtW-Fs    #)any)r   r	   s   ` r   _matches_patternr      s    FXFFF    modelweight_decayweight_decay_exclude_1dno_weight_decay_listfallback_listfallback_no_weight_decayc                    |rt        |      t        |      z  }| }g }g }g }	g }
| j                         D ]  \  }}|j                  st        ||      }|r&|r|
j	                  |       5|	j	                  |       Gt        ||      }|xr" |j
                  dk  xs |j                  d      }|s|r&|r|
j	                  |       |	j	                  |       |r|j	                  |       |j	                  |        g }|	r|j	                  |	dd       |r|j	                  ||d       |
r|j	                  |
ddd       |r|j	                  ||dd       |S )N   z.bias        )paramsr   T)r   r   use_fallback)setnamed_parametersrequires_gradr   appendndimendswith)r   r   r   r   r   r   no_wddecaydecay_fallbackno_decayno_decay_fallbackr   paramis_fallbackmatches_patternis_excluded_1dgroupss                    r   param_groups_weight_decayr1      sc     M*S1E-FFEENH--/ (e"" 't];!((/& /t5IJO4d%**/:cT]][bMcN%,,U3OOE* "))%0LL'9(< F2>?EF!2BX\]^_cdeMr   c                 <     t                t         fdd      S )Nc                  .    t        t                     S r   )tupler   itsizes   r   <lambda>z_group.<locals>.<lambda>Q   s    fR./ r    )iterr5   s   ``r   _groupr;   O   s    	bB/44r   c                    d }t        | di       j                  dd       }g }g }| j                         D ]0  \  }} |||      r|j                  |      n|j                  |       2 t	        |      }	||	| z   }t        t        ||            }t	        |      }
t        |      D ci c]  \  }}|D ]  }||  }}}}|j                  |D ci c]  }||
 c}       |S c c}}}w c c}w )Nc                     |syt        |t        t        f      r(t        |D cg c]  }| j	                  |       c}      S | j	                  |      S c c}w )NT)
isinstancer4   listr   
startswith)nhphpis      r   _in_headz#auto_group_layers.<locals>._in_headU   sI    UDM*R8cS)899<<## 9s   Apretrained_cfg
classifier)	getattrgetr"   r$   lenr?   r;   	enumerateupdate)r   layers_per_group
num_groupsrD   head_prefixnames_trunk
names_headrA   _num_trunk_layersnum_trunk_groupsil	layer_maps                 r   auto_group_layersrW   T   s   $ %!126::<NKKJ&&( T1 (K 8
!k>P>PQR>ST ;'-*<=vk+;<=K;'"+K"8DD$!Q!DQADDID:>aa))>? E>s   +C%
C,layer_decay	min_scaleno_opt_scaleverbosec
                 r   |rt        |      t        |      z  }i }
i }t        | d      rt        | | j                  d      d      }nt	        |       }t        |j                               dz   }|dz
  t        fdt        |      D              }| j                         D ]  \  }}|j                  st        ||      }|r|j                  dk  st        ||      rd}d	}nd
}|}|j                  |      }||   }|r||k  rd|_
        k|rdnd}d|||fz  }||vr|||g d|
|<   ||g d||<   |rd||   d<   |
|   d   j                  |       ||   d   j                  |        |	r-ddl}t         j#                  d|j%                  |
d      z         t        |j                               S )z
    Parameter groups for layer-wise lr decay & weight decay
    Based on BEiT: https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py#L58
    group_matcherF)coarseT)reverser   c              3   B   K   | ]  }t        |z
  z          y wr   )max)r   rT   rX   	layer_maxrY   s     r   r   z+param_groups_layer_decay.<locals>.<genexpr>   s!     b1I{y1}'EFbs   r*   r   r(   	_fallback zlayer_%d_%s%s)lr_scaler   r    param_names)re   r   r   r    rf   r   r   Nzparameter groups: 
%s   )indent)r!   hasattrr   r]   rW   ra   valuesr?   ranger"   r#   r   r%   rH   r$   json_loggerinfodumps)r   r   r   r   r   r   rX   rY   rZ   r[   param_group_namesparam_groupsrV   
num_layerslayer_scalesr   r,   r-   g_decay
this_decaylayer_id
this_scalefallback_suffix
group_namerl   rb   s         ``                 @r   param_groups_layer_decayrz   q   s   "  M*S1E-FFLuo&$UE,?,?u,?,MW[\	 &e,	Y%%'(1,JQIbPUV`PabbL--/ *9e"" 't]; $

a<LTSg<h GJG%J==y1!(+
J5"'E)4+"$'?'KK
\)& * +!	-j) ' *(L$
 ;?Z(8*%m4;;DAZ *11%8U*9X -

;LUV
0WWX##%&&r   )gh㈵>Tr9   r9   F)   N)	g?r9   r9   FTg      ?r   NF)r   logging	itertoolsr   typingr   r   torchr   timm.modelsr   	getLogger__name__rm   strboolr   Modulefloatr1   r;   rW   
_layer_maprz   r9   r   r   <module>r      sZ      '  ( '

H
%G3 G*S/ Gd G )-(,02)+).:yy:uo: "&: )o	:
 "#: #':x5
4 

 #02)+).(, (,Q'yyQ'Q' )oQ' "#	Q'
 #'Q' "&Q' Q' Q' uoQ' Q'r   