emahandler#

ساخت وبلاگ

از کنترل کننده میانگین متحرک (EMA) می توان برای محاسبه نسخه صاف مدل استفاده کرد. مدل EMA به شرح زیر به روز می شود:

θ EMA , t + 1 = ( 1 − λ ) ⋅ θ EMA , t + λ ⋅ θ t heta_, t+1> = (1 - lambda) cdot heta_, t>+ lambda cdot theta_ θ ema ، t + 1 = (1 - λ) ⋅ θ ema ، t + λ ⋅ θ t

where θ EMA , t heta_, t>θ ema ، t و θ t theta_ θ t وزن EMA و وزن مدل آنلاین به ترتیب در تکرار t t t-th است. λ lambda λ حرکت به روزرسانی است. حرکت فعلی را می توان از Engine. state. ema_momentum بازیابی کرد.

  • مدل (torch. nn. modules. module. module) - مدل آنلاین که یک مدل EMA برای آن محاسبه می شود. اگر مدل dataparallal یا توزیع شده distateDataparally باشد ، صافی EMA به Model. Module اعمال می شود.
  • Momentum (Float) - حرکت به روزرسانی بعد از مرحله گرم کردن ، باید در محدوده (0 ، 1) سمت چپ (0 ، 1 راست) (0 ، 1) شناور شود.
  • momentum_warmup (اختیاری [شناور]) - حرکت به روزرسانی اولیه در مرحله گرم کردن.
  • warmup_iters (اختیاری [int]) - تکرار گرم شدن.
  • Handle_Buffers (STR) - نحوه استفاده از بافرهای مدل در طول آموزش. سه گزینه وجود دارد: 1. "کپی" به معنای کپی کردن بافرهای مدل آنلاین است. 2. "بروزرسانی" به معنای استفاده از EMA در بافرهای مدل آنلاین است. 3. "ema_train" به معنای تنظیم مدل EMA برای آموزش حالت و پرش از کپی یا به روزرسانی بافر است.

مدل میانگین حرکت نمایی.

مدل آنلاین که توسط Emahandler ردیابی می شود. این مدل است. module اگر مدل در روش اولیه سازی نمونه ای از distribetedDataparally باشد.

حرکت به روزرسانی.

نحوه رسیدگی به بافرهای مدل در طول آموزش.

اگر Handle_Buffers "کپی" یا "بروزرسانی" باشد ، مدل EMA در حال حاضر در حالت EALL قرار دارد. اگر مدل موجود در آرگومان ها یک nn. module یا توزیع شده است ، مدل EMA یک nn. module است و در همان دستگاه مدل آنلاین قرار دارد. اگر مدل یک nn. dataparally باشد ، مدل EMA یک nn. dataparally است.

توصیه می شود در مراحل زیر به صورت اولیه و استفاده از یک کنترل کننده EMA:

  1. مدل اولیه (nn. module یا distributeddataparally) و ema_handler (emahandler).
  2. Build Trainer (Ignite. Engine. Engine).
  3. رزومه از پاسگاه برای مدل و ema_handler. ema_model.
  4. ema_handler را به مربی وصل کنید.
دستگاه = مشعل.دستگاه("CUDA: 0") مدل = nn.خطی(2, 1).to(دستگاه) # EMA را هر 5 تکرار به روز کنید ema_handler = ممتاز(مدل, تکانه=0. 0002) # مدل EMA را که نمونه ای از nn. module است دریافت کنید ema_model = ema_handler.ema_model مربی = موتور(train_step_fn) برای بارگذاری = "مدل": مدل, "ema_model", ema_model, "مربی", مربی> if رزومه_ از is نه هیچ یک: محل بازرسی.load_objects(برای بارگذاری, محل بازرسی=رزومه_ از) # مدل EMA را هر 5 تکرار به روز کنید ema_handler.ضمیمه کردن(مربی, نام="ema_momentum", رویداد=مناسبت ها.reteration_completed(هر=5)) # دستگیرنده های دیگر را اضافه کنید نجات دادن = برای بارگذاری ckpt_handler = محل بازرسی(نجات دادن, ناکار کردن(. ), . ) مربی.add_event_handler(مناسبت ها.EPOCH_COMPLETED, ckpt_handler) # حرکت فعلی را می توان از موتور بازیابی کرد. # نام ویژگی پارامتر "Name" است که در عملکرد ضمیمه استفاده می شود @مربی.on(مناسبت ها.reteration_completed): دنباله print_ema_momentum(موتور): چاپ(f"حرکت فعلی: موتور.حالت.ema_momentum>" # برای اعتبار سنجی از مدل EMA استفاده کنید val_step_fn = get_val_step_fn(ema_model) ارزیاب = موتور(val_step_fn) @مربی.on(مناسبت ها.EPOCH_COMPLETED) دنباله run_validation(موتور): موتور.اجرا کن(val_data_loader) مربی.اجرا کن(. ) 

مثال زیر نشان می دهد که چگونه می توان گرم شدن را به حرکت EMA انجام داد:

دستگاه = مشعل.دستگاه("CUDA: 0") مدل = nn.خطی(2, 1).to(دستگاه) # به طور خطی حرکت EMA را از 0. 2 به 0. 002 در 100 تکرار اول تغییر دهید ، # سپس یک حرکت ثابت EMA از 0. 002 را پس از آن حفظ کنید ema_handler = ممتاز(مدل, تکانه=0. 002, Momentum_warmup=0.2, Warmup_iters=100) موتور = موتور(Step_FN) ema_handler.ضمیمه کردن(موتور, نام="ema_momentum") موتور.اجرا کن(. ) 

مثال زیر نشان می دهد که چگونه می توان دو دستگیرنده را به همان مربی وصل کرد:

تولید کننده = build_generator(. ) تبعینده = build_discriminator(. ) ژنرال = ممتاز(تولید کننده) دیسک = ممتاز(تبعینده) Step_FN = get_step_fn(. ) موتور = موتور(Step_FN) # مدل EMA ژنراتور را هر 1 تکرار به روز کنید ژنرال.ضمیمه کردن(موتور, "gen_ema_momentum", رویداد=مناسبت ها.reteration_completed) # مدل EMA از تبعیض را هر 2 تکرار به روز کنید دیسک.ضمیمه کردن(موتور, "dis_ema_momentum", رویداد=مناسبت ها.reteration_completed(هر=2)) Engine.on(مناسبت ها.reteration_completed) دنباله print_ema_momentum(موتور): چاپ(f"حرکت فعلی برای ژنراتور: موتور.حالت.gen_ema_momentum>") چاپ(f"حرکت فعلی برای تبعیض آمیز: موتور.حالت.disc_ema_momentum>") موتور.اجرا کن(. ) 

جدید در نسخه 0. 4. 6.

کنترل کننده را به موتور وصل کنید.

کنترل کننده را به موتور وصل کنید. پس از اتصال کنترل کننده ، اگر این ویژگی وجود نداشته باشد ، یک ویژگی جدید با نام نام اضافه می کند. سپس ، حرکت فعلی را می توان از موتور بازیابی کرد. در هنگام کار موتور.

دو مورد وجود دارد که یک حرکت با نام در حال حاضر وجود دارد: 1. موتور پس از از سرگیری ، دیکتات دولتی خود را بارگیری کرده است. در این حالت ، دیگر نیازی به شروع مجدد حرکت نیست و کاربران می توانند Wa_IF_EXISTS را برای سرکوب پیام هشدار دهنده به False تنظیم کنند. 2. یک کنترل کننده دیگر یک ویژگی دولتی با همین نام ایجاد کرده است. در این حالت ، کاربران باید نام دیگری را برای حرکت EMA انتخاب کنند.

  • موتور (Ignite. Engine. Engine. Engine) - مربی که کنترل کننده به آن وصل می شود.
  • نام (STR) - نام ویژگی برای بازیابی حرکت EMA از Engine. state. این باید یک نام منحصر به فرد باشد زیرا یک مربی می تواند چندین گیرنده EMA داشته باشد.
  • WARN_IF_EXISTS (BOOL) - اگر درست باشد ، اگر حرکت با نام از قبل وجود داشته باشد ، هشدار داده می شود.
  • رویداد (Union [str ، inginite. engine. events. events. events ، Ignite. engine. events. CallableEventWithFilter ، Ignite. Engine. EventsList]) - رویداد هنگامی که مدل EMA و مدل EMA به روز می شوند.

© کپی رایت 2023 ، همکاران Pytorch-Nigite. آخرین به روز شده در تاریخ 05/05/2023 ، 10:07:01 PM.

استراتژی‌های اسکالپ...
ما را در سایت استراتژی‌های اسکالپ دنبال می کنید

برچسب : نویسنده : ناصر تقوایی بازدید : 37 تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 7:42