L iDdZddlmZmZmZddlZddlmZddlmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZddgZGd deZd d ed ed e d ed e d ze_deedeedeedeedeededededededededefdZdeedeedeedeedeededededededededefdZe e d!deedeedeedeedeedeededededededededefd Zy)"z1Implementation for the Resilient backpropagation.)castOptionalUnionN)Tensor)_capturable_doc_default_to_fused_or_foreach_differentiable_doc_disable_dynamo_if_unsupported _foreach_doc!_get_capturable_supported_devices_get_scalar_dtype _maximize_doc _params_doc _to_scalar_use_grad_for_differentiable _view_as_real OptimizerParamsTRproprpropceZdZ dddddddedeeefdeeefdeeefded e ed ed effd Z fd Z dZ e ddZxZS)rFN) capturableforeachmaximizedifferentiableparamslretas step_sizesrrrrct|tr|jdk7r tdd|kstd|d|dcxkrdcxkr|dksntd|dd|d|||||||d } t ||| y) NrzTensor lr must be 1-elementgzInvalid learning rate: r?zInvalid eta values: z, )rrr rrrr) isinstancernumel ValueErrorsuper__init__) selfrrrr rrrrdefaults __class__s W/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/optim/rprop.pyr'zRprop.__init__s b& !bhhjAo:; ;by6rd;< <T!W,s,T!W,3DG9BtAwiHI I$ ,$  *c0t|||jD]}|jdd|jdd|jdd|jdd|dD]}|jj |g}t |dk7s.tj|drGt|d}|dr*tj|t|j ntj|t |d<y) NrrFrrrrstepdtypedevicer0) r& __setstate__ param_groups setdefaultstategetlentorch is_tensorfloattensorrr1)r(r6grouppp_statestep_valr*s r+r3zRprop.__setstate__=s U#&& E   Y -   Z /   -u 5   \5 18_ **..B/w<1$U__WV_-M$WV_5H !. $,=,?#\\(:K:MN FO   r,c dd}|dD]}|j|tj|z}|j||j} | jr t d|j| |j |} t| dk(r|dr*tjdt|jntjdt| d <tj|tj | d <|jjr*tj| t|d |d | d <n%tj| t!|d | d <|j| d |j| d |j| d |S)NFrz'Rprop does not support sparse gradientsrrr/r2r. memory_formatprevr step_size)gradr9 is_complexappend is_sparse RuntimeErrorr6r8zerosrr1 zeros_likepreserve_formatr0 full_likecomplexr) r(r=rgradsprevsr state_steps has_complexr>rGr6s r+ _init_groupzRprop._init_groupPs| x .Avv~ 5++A. .K MM! 66D~~"#LMM LL JJqME5zQ\*KK*;*=ahhOR/@/BCf !& 0 0%BWBW Xf 77%%*/geDk5;?*E+&*/z%PT+?V)WE+& LLv '   eK0 1   uV} -A .Dr,cb|jd}|$tj5|}ddd|jD][}g}g}g}g}g}|d\} } |d\} } |d} |d}|j ||||||}t |||||| | | | | ||d|d|]|S#1swYuxYw) zPerform a single optimization step. Args: closure (Callable, optional): A closure that reevaluates the model and returns the loss. Nrr rrrr) step_size_min step_size_maxetaminusetaplusrrrrrT) _cuda_graph_capture_health_checkr9 enable_gradr4rUr)r(closurelossr=rrQrRr rSrYrZrWrXrrrTs r+r.z Rprop.stepvs  --/  ""$ !y !&& E#%F"$E"$E')J(*K %f Hg+0+> (M=I&GZ(H**vueZK ++!!$%56 .' ! B I ! !s B%%B.)g{Gz?)g?g333333?)gư>2N)__name__ __module__ __qualname__rrr;rtupleboolrr'r3rUrr. __classcell__)r*s@r+rrs$($.*4 +!"&$++ %- +E5L! + %,' ++$+++<&$L"/"/r,a Implements the resilient backpropagation algorithm. .. math:: \begin{aligned} &\rule{110mm}{0.4pt} \\ &\textbf{input} : \theta_0 \in \mathbf{R}^d \text{ (params)},f(\theta) \text{ (objective)}, \\ &\hspace{13mm} \eta_{+/-} \text{ (etaplus, etaminus)}, \Gamma_{max/min} \text{ (step sizes)} \\ &\textbf{initialize} : g^0_{prev} \leftarrow 0, \: \eta_0 \leftarrow \text{lr (learning rate)} \\ &\rule{110mm}{0.4pt} \\ &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do} \\ &\hspace{5mm}g_t \leftarrow \nabla_{\theta} f_t (\theta_{t-1}) \\ &\hspace{5mm} \textbf{for} \text{ } i = 0, 1, \ldots, d-1 \: \mathbf{do} \\ &\hspace{10mm} \textbf{if} \: g^i_{prev} g^i_t > 0 \\ &\hspace{15mm} \eta^i_t \leftarrow \mathrm{min}(\eta^i_{t-1} \eta_{+}, \Gamma_{max}) \\ &\hspace{10mm} \textbf{else if} \: g^i_{prev} g^i_t < 0 \\ &\hspace{15mm} \eta^i_t \leftarrow \mathrm{max}(\eta^i_{t-1} \eta_{-}, \Gamma_{min}) \\ &\hspace{15mm} g^i_t \leftarrow 0 \\ &\hspace{10mm} \textbf{else} \: \\ &\hspace{15mm} \eta^i_t \leftarrow \eta^i_{t-1} \\ &\hspace{5mm}\theta_t \leftarrow \theta_{t-1}- \eta_t \mathrm{sign}(g_t) \\ &\hspace{5mm}g_{prev} \leftarrow g_t \\ &\rule{110mm}{0.4pt} \\[-1.ex] &\bf{return} \: \theta_t \\[-1.ex] &\rule{110mm}{0.4pt} \\[-1.ex] \end{aligned} For further details regarding the algorithm we refer to the paper `A Direct Adaptive Method for Faster Backpropagation Learning: The RPROP Algorithm `_.z Args: a{ lr (float, optional): learning rate (default: 1e-2) etas (Tuple[float, float], optional): pair of (etaminus, etaplus), that are multiplicative increase and decrease factors (default: (0.5, 1.2)) step_sizes (Tuple[float, float], optional): a pair of minimal and maximal allowed step sizes (default: (1e-6, 50)) z z rrQrRr rSrWrXrYrZrrrrTct|D]\} }|| }| s|n| }|| }|| }|| }tjjs\| rZt }|j j |j j k(r|j j |vs Jd|d|dz }tj|rTtj|}tj|}tj|}tj|}| r.|j|jj}n|j|j}| r|jtj|jd|||jtj|jd|||jtj|j!dd|n<|||jd<|||jd<d||j!d<|j#|j%|||jtj&}| r6|jtj|j!|d|nd||j!|<|j)|j|d|j|y)NIIf capturable=True, params and state_steps must be on supported devices: .rrrCvalue) enumerater9compiler is_compilingr r1typerH view_as_realmulclonesigncopy_wheregtlteqmul_clamp_rNaddcmul_)rrQrRr rSrWrXrYrZrrrrTiparamrGrErFr.capturable_supported_devicesrts r+_single_tensor_rproprsv f%35Qx#t$QxqM 1~~~**,+L+N ( !!T[[%5%55LL%%)EE \\x[yyz{  F     E "%%d+D%%d+D&&u-E**95I 88DJJL)..0D88D>&&(D  JJu{{4771:w= > JJu{{4771:x> ? JJu{{4771:q$7 8&D 'D  D  t##M=Azz(=(=z>  JJu{{4778#4a> ?&'D" # tyy{IR8 4g3r,c t|dk(ry| rJdtjjs5| r3t t fdt ||Ds Jddtj|||||g} | jD]%\\}}}}}}ttt|}ttt|}ttt|}ttt|}ttt|}tjjs=|djr.tj|tjddd ntj|d | rt!||||tj"||}| rtj$|tj&||| rtj$||}tj(|| r|D]}|j+tj,|j/d|||j+tj,|j1d|||j+tj,|j3dd |nC|D]>}|||j/d<|||j1d<d ||j3d<@tj4|||D]}|j7||t|}t9t|D]@}||j+tj,||j3|d||B~|Dcgc]}|j;}}tj<|||d (ycc}w) Nrz#_foreach ops don't support autogradc3K|]N\}}|jj|jjk(xr|jjvPywr`)r1rp).0r>r.rs r+ z&_multi_tensor_rprop..=sQ 4 HHMMT[[-- - > !== > sAArhrir"cpu)r1)alpharrjrk)r8r9rnror allzipr"_group_tensors_by_device_and_dtypevaluesrlistris_cpu _foreach_add_r<r _foreach_mul _foreach_neg__foreach_copy__foreach_sign_rurvrwrxry _foreach_mul_r{rangert_foreach_addcmul_) rrQrRr rSrWrXrYrZrrrrTgrouped_tensorsgrouped_params_grouped_grads_grouped_prevs_grouped_step_sizes_grouped_state_steps__grouped_params grouped_grads grouped_prevsgrouped_step_sizesgrouped_state_stepssignsrtrFr}rG grad_signsrs @r+_multi_tensor_rpropr%su  6{aDDD  >> & & (Z'H'J$ v{3   XXtWuuv w    BB z;7O  " " $ J   d6lO<T&\>: T&\>: !$v,0CD"4<1EF ~~**,1DQ1G1N1N   #U\\#e%DC     3Q 7   }>P ""=-@     & ]M:     .%  U#  = 5;;twwqz7DAB 5;;twwqz8TBC 5;;twwqz1d;< =  %#*TWWQZ #+TWWQZ #$TWWQZ  % .6+ ;I   ]M : ; ]+ s=)* A !  " " E!HKK11mA6FG   /<.s 5() 1ell#5s$&zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsNF) use_fusedz6torch.jit.script not supported with foreach optimizers)rWrXrYrZrrrrT) r9rnrorrKr jit is_scriptingrr)rrQrRr rSrrrrrTrWrXrYrZrfuncs r+rrs4 >> & & (5-852 ^  1 Ne 7599))+STTuyy--/"#  ##%r,)NFFFF)__doc__typingrrrr9r optimizerrr r r r r rrrrrrrr__all__rrr;rerrrrBr,r+rs8(( $ G HIHX!LD        E1 lC LC <C <CV C f CCCCCCCCCLm Lm <m  <m V m f m m m m m m m m m h 1EF# ; L; <; <;V ; f ;d^;;;;;;; !;"#;G;r,