یک LightningModule کد PyTorch شما را در 6 بخش سازماندهی می کند:
حلقه قطار (مرحله_آموزشی)
حلقه اعتبارسنجی (validation_step)
حلقه تست (test_step)
حلقه پیش بینی (predict_step)
بهینه سازها و LR Schedulers (configure_optimizers)
به چند نکته توجه کنید
این همان کد است.
کد PyTorch انتزاعی نیست - فقط سازماندهی شده است.
تمام کدهای دیگری که در لایتنینگ ماژول نیستند توسط Trainer برای شما خودکار شده است.
نیازی به تماس . cuda () یا . to (دستگاه) نیست. لایتنینگ این کارها را برای شما انجام می دهد.
هنگامی که تحت یک استراتژی توزیع شده اجرا می شود، Lightning به طور پیش فرض نمونه بردار توزیع شده را برای شما مدیریت می کند.
LightningModule یک torch. nn. Module است اما با قابلیت های اضافی. از آن به عنوان چنین استفاده کنید!
بنابراین، برای استفاده از لایتنینگ، فقط باید کد خود را سازماندهی کنید که حدود 30 دقیقه طول می کشد، (و بیایید واقعی باشیم، احتمالاً باید این کار را انجام دهید).
مثال شروع¶
در اینجا تنها روش های مورد نیاز است.
که با انجام آن می توانید آموزش دهید:
LightningModule روشهای راحتی زیادی دارد، اما موارد اصلی که باید در مورد آنها بدانید عبارتند از:
محاسبات را در اینجا تعریف کنید
فقط برای استنتاج استفاده کنید (جدا از training_step)
حلقه آموزش کامل
حلقه اعتبار سنجی کامل
حلقه آزمایش کامل
حلقه پیش بینی کامل
بهینه سازها و زمانبندی LR را تعریف کنید
آموزش¶
حلقه آموزشی
برای فعال کردن حلقه آموزشی، متد training_step() را لغو کنید.
زیر کاپوت، لایتنینگ کارهای زیر را انجام می دهد (شبه کد):
معیارهای سطح دوره قطار¶
اگر می خواهید معیارهای سطح دوره را محاسبه کنید و آنها را ثبت کنید، از log() استفاده کنید.
شی log() به طور خودکار معیارهای درخواستی را در یک دوره کامل و دستگاه ها کاهش می دهد. در اینجا کد شبه کاری که در زیر کاپوت انجام می دهد آمده است:
عملیات در سطح دوره قطار¶
اگر باید کاری را با تمام خروجی های هر training_step() انجام دهید، متد training_epoch_end() را لغو کنید.
شبه کد منطبق عبارت است از:
آموزش با Data Parallel¶
هنگام آموزش با استفاده از استراتژی که داده ها را از هر دسته در بین GPU ها تقسیم می کند، گاهی اوقات ممکن است لازم باشد آنها را در GPU اصلی برای پردازش (DP) جمع آوری کنید.
در این حالت، متد ()training_step_end را پیاده سازی کنید که خروجی هایی از همه دستگاه ها خواهد داشت و می توانید برای به دست آوردن نتایج موثر جمع آوری کنید.
در اینجا شبه کد آموزشی Lightning برای DP آمده است:
اعتبار سنجی¶
حلقه اعتبارسنجی¶
برای فعال کردن حلقه اعتبارسنجی در حین آموزش، متد ()validation_step را لغو کنید.
زیر کاپوت، لایتنینگ کارهای زیر را انجام می دهد (شبه کد):
همچنین می توانید فقط با استفاده از اعتبار سنجی_ستپ () و تماس با اعتبار () ، فقط حلقه اعتبار سنجی را در داده های اعتبار سنجی خود اجرا کنید.
توصیه می شود که در دستگاه های منفرد اعتبار کنید تا اطمینان حاصل شود که هر نمونه/دسته ای دقیقاً یک بار ارزیابی می شود. این امر برای اطمینان از معیار برای مقالات تحقیقاتی به روش صحیح انجام شده است. در غیر این صورت ، در یک تنظیم چند دستگاه ، نمونه ها می توانند در هنگام استفاده از DistribatedSampler ، به عنوان مثال ، تکثیر شوند. با استراتژی = "DDP". برخی از نمونه ها را در برخی از دستگاه ها تکرار می کند تا اطمینان حاصل شود که همه دستگاه ها در صورت ورودی های ناهموار اندازه دسته ای دارند.
اعتبار سنجی معیارهای سطح سطح
اگر شما نیاز به انجام کاری با تمام خروجی های هر اعتبار سنجی_ step () دارید ، از روش اعتبار سنجی_EPOCH_END () غلبه کنید. توجه داشته باشید که این روش قبل از training_epoch_end () خوانده می شود.
اعتبار سنجی با dataparallall¶
هنگام اعتبارسنجی با استفاده از استراتژی که داده ها را از هر دسته در سراسر GPU تقسیم می کند ، گاهی اوقات ممکن است لازم باشد که آنها را در GPU اصلی برای پردازش (DP) جمع کنید.
در این حالت ، روش leventation_step_end () را اجرا کنید که از همه دستگاه ها خروجی خواهد داشت و برای به دست آوردن نتایج مؤثر می توانید جمع کنید.
در اینجا اعتبار رعد و برق شبه کد برای DP است:
آزمایش کردن¶
حلقه آزمون
فرآیند فعال کردن یک حلقه آزمایش همان فرآیند فعال کردن یک حلقه اعتبار سنجی است. لطفاً برای جزئیات بیشتر به بخش فوق مراجعه کنید. برای این کار شما باید روش test_step () را نادیده بگیرید.
تنها تفاوت این است که حلقه تست فقط در هنگام استفاده از تست () نامیده می شود.
دو روش برای تماس با تست () وجود دارد:
توصیه می شود که در دستگاه های منفرد اعتبار کنید تا اطمینان حاصل شود که هر نمونه/دسته ای دقیقاً یک بار ارزیابی می شود. این امر برای اطمینان از معیار برای مقالات تحقیقاتی به روش صحیح انجام شده است. در غیر این صورت ، در یک تنظیم چند دستگاه ، نمونه ها می توانند در هنگام استفاده از DistribatedSampler ، به عنوان مثال ، تکثیر شوند. با استراتژی = "DDP". برخی از نمونه ها را در برخی از دستگاه ها تکرار می کند تا اطمینان حاصل شود که همه دستگاه ها در صورت ورودی های ناهموار اندازه دسته ای دارند.
استنباط
حلقه پیش بینی
به طور پیش فرض ، روش Predict_Step () روش Forward () را اجرا می کند. به منظور سفارشی کردن این رفتار ، به سادگی از روش PREPTICT_STEP () غلبه کنید.
به عنوان مثال ، اجازه دهید پیش بینی شده_ predict_step را امتحان کنیم و مونت کارلو را امتحان کنیم:
زیر کاپوت، لایتنینگ کارهای زیر را انجام می دهد (شبه کد):
دو روش برای تماس با پیش بینی () وجود دارد:
استنتاج در تحقیقات
اگر می خواهید استنتاج با سیستم را انجام دهید ، می توانید یک روش رو به جلو را به رعد و برق اضافه کنید.
هنگام استفاده از جلو ، شما وظیفه دارید با Eval () تماس بگیرید و از مدیر متن NO_GRAGR () استفاده کنید.
مزیت اضافه کردن رو به جلو این است که در سیستم های پیچیده ، می توانید یک روش استنباط بسیار درگیر مانند تولید متن را انجام دهید:
در موردی که می خواهید استنتاج خود را مقیاس کنید ، باید از Predict_Step () استفاده کنید.
استنتاج در تولید ¶
برای مواردی مانند تولید ، ممکن است بخواهید مدل های مختلفی را در داخل یک رعد و برق تکرار کنید.
سپس در هر مدل دلخواه عبور کنید تا با این کار مطابقت داشته باشد
وظایف می توانند به طور خودسرانه پیچیده باشند مانند اجرای آموزش GAN ، خودكاری یا حتی RL.
در صورت استفاده از این ، مدل می تواند از کار جدا شود و در نتیجه در تولید بدون نیاز به نگه داشتن آن در یک رعد و برق استفاده شود.
مثال زیر نشان می دهد که چگونه می توانید استنتاج را در زمان اجرا پایتون اجرا کنید:
برای کسب اطلاعات در مورد روشهای احتمالی انجام استنتاج در تولید ، استنتاج را در راهنمای تولید بررسی کنید.
ماژول های کودک
پروژه های تحقیقاتی تمایل دارند رویکردهای مختلف را به همان مجموعه داده آزمایش کنند. این کار در رعد و برق با وراثت بسیار آسان است.
به عنوان مثال ، تصور کنید که اکنون می خواهیم یک AutoEncoder را آموزش دهیم تا به عنوان یک استخراج کننده ویژگی برای تصاویر استفاده کند. تنها مواردی که در مدل LitAutoEncoder تغییر می کند ، مرحله اولیه ، رو به جلو ، آموزش ، اعتبار سنجی و آزمون است.
و ما می توانیم این کار را با استفاده از مربی آموزش دهیم:
و به یاد داشته باشید که روش رو به جلو باید استفاده عملی از یک رعد و برق را تعریف کند. در این حالت ، ما می خواهیم از LitAutoEncoder برای استخراج نمایش های تصویر استفاده کنیم:
LightningModule api¶
مواد و روش ها¶
all_gather¶
به کاربران اجازه می دهد تا از خود با خود تماس بگیرند. ALL_GATHER () از LightningModule ، بنابراین باعث می شود All_Gather Accelerator Agnostic باشد. All_gather تابعی است که توسط شتاب دهنده ها برای جمع آوری تانسور از چندین فرآیند توزیع شده ارائه شده است.
DATA ¶ (اتحادیه [Tensor ، DICT ، لیست ، tuple]) - int ، float ، تنش شکل (دسته ، ...) یا مجموعه (احتمالاً تو در تو) آن.
گروه ¶ (اختیاری [هر]) - گروه فرآیند برای جمع آوری نتایج از. پیش فرض برای همه فرایندها (جهان)
SYNC_GRADS ¶ (BOOL) - پرچمی که به کاربران امکان می دهد شیب را برای عملکرد All_gather همگام سازی کنند
تانسور شکل (World_size ، دسته ، ...) ، یا اگر ورودی یک مجموعه باشد ، خروجی نیز مجموعه ای با تنش های این شکل خواهد بود.
configure_callbacks¶
پیکربندی تماس های خاص مدلهنگامی که مدل متصل می شود، به عنوان مثال، زمانی که . fit() یا . test () فراخوانی می شود، لیست یا یک تماس برگشتی در اینجا با لیست تماس های ارسال شده به آرگومان callbacks Trainer ادغام می شود. اگر یک تماس برگشتی در اینجا همان نوع یک یا چند تماس برگشتی را داشته باشد که قبلاً در لیست تماسهای Trainer وجود دارد، اولویت دارد و آنها را جایگزین میکند. علاوه بر این، لایتنینگ مطمئن می شود که تماس های مدلCheckpoint آخرین بار اجرا می شوند.
پاسخ به تماس یا لیستی از تماسهای برگشتی که لیست تماسهای برگشتی را در ترینر گسترش میدهد.
configure_optimizers¶
انتخاب کنید از چه بهینهسازیها و زمانبندیهایی با نرخ یادگیری در بهینهسازی خود استفاده کنید. به طور معمول شما به یکی نیاز دارید. اما در مورد GAN یا موارد مشابه، ممکن است چندین مورد داشته باشید.
هر یک از این 6 گزینه
بهینه ساز واحد.
فهرست یا چند بهینه ساز.
دو لیست - لیست اول چندین بهینه ساز دارد و دومی چندین زمانبندی LR (یا چندین lr_scheduler_config) دارد.
دیکشنری، با یک کلید "بهینه ساز"، و (به صورت اختیاری) یک کلید "lr_scheduler" که مقدار آن یک زمانبندی LR یا lr_scheduler_config است.
چندین فرهنگ لغت همانطور که در بالا توضیح داده شد، با یک کلید "فرکانس" اختیاری.
هیچ - Fit بدون هیچ بهینهسازی اجرا میشود.
lr_scheduler_config یک فرهنگ لغت است که شامل زمانبندی و پیکربندی مرتبط با آن است. پیکربندی پیش فرض در زیر نشان داده شده است.
هنگامی که زمانبندیهایی وجود دارد که در آن متد . step() به یک مقدار مشروط میشود، مانند زمانبندی torch. optim. lr_scheduler. ReduceLROnPlateau، لایتنینگ نیاز دارد که lr_scheduler_config حاوی کلمه کلیدی "monitor" برای نام متریکی باشد که زمانبند باید تنظیم شود. مشروط شود.
معیارها را میتوان با استفاده از self. log ('metric_to_track'، metric_val) در LightningModule خود، برای نظارت در دسترس قرار داد.
مقدار فرکانس مشخص شده در یک دیکت همراه با کلید بهینه ساز یک int مربوط به تعداد دسته های متوالی بهینه سازی شده با بهینه ساز خاص است. باید به هیچ کدام یا به همه بهینه سازها داده شود. بین ارسال چند بهینه ساز در یک لیست و ارسال چند بهینه ساز در فرهنگ لغت با فرکانس 1 تفاوت وجود دارد:
در حالت اول، همه بهینه سازها در هر مرحله بهینه سازی بر روی دسته داده شده کار خواهند کرد.
در حالت دوم، تنها یک بهینه ساز در هر مرحله روی دسته داده شده کار می کند.
این با مقدار فرکانس مشخص شده در lr_scheduler_config که در بالا ذکر شد متفاوت است.
در این مثال، بهینه ساز اول برای 5 مرحله اول، بهینه ساز دوم برای 10 مرحله بعدی استفاده می شود و آن چرخه ادامه خواهد داشت. اگر یک زمانبندی LR برای بهینهساز با استفاده از کلید lr_scheduler در دستور بالا مشخص شده باشد، زمانبندی تنها زمانی بهروزرسانی میشود که بهینهساز آن استفاده شود.
چند نکته که باید بدانید:
لایتنینگ ()backward و () . step را بر روی هر بهینه ساز در صورت نیاز فراخوانی می کند.
اگر زمانبندی نرخ یادگیری در configure_optimizers() با کلید «فاصله» (پیشفرض «epoch») در پیکربندی زمانبند مشخص شده باشد، Lightning در صورت بهینهسازی خودکار، روش . step() زمانبندی را بهطور خودکار فراخوانی میکند.
اگر از دقت 16 بیتی استفاده می کنید (دقت = 16)، لایتنینگ به طور خودکار بهینه سازها را مدیریت می کند.
اگر از چند بهینه ساز استفاده می کنید، training_step() یک پارامتر optimizer_idx اضافی خواهد داشت.
اگر از torch. optim. LBFGS استفاده می کنید، Lightning عملکرد بسته شدن را به طور خودکار برای شما کنترل می کند.
اگر از چند بهینه ساز استفاده می کنید، گرادیان فقط برای پارامترهای بهینه ساز فعلی در هر مرحله آموزش محاسبه می شود.
اگر میخواهید کنترل کنید که این بهینهسازها هر چند وقت یکبار از برنامه پیشفرض . step() گام بر میدارند یا لغو میکنند، قلاب optimizer_step() را لغو کنید.
رو به جلو¶
*args ¶ - هر چیزی که تصمیم دارید به روش رو به جلو منتقل کنید.
**kwargs ¶ - آرگومان های کلیدواژه نیز امکان پذیر است.
خروجی مدل شما
یخ زدگی¶
برای استنتاج همه پارامترها را فریز کنید.
لایتنینگ ماژول. log (نام، مقدار، prog_bar = نادرست، لاگر = True، on_step = هیچ، on_epoch = هیچ، reduce_fx = 'میانگین'، enable_graph = نادرست، sync_dist = نادرست، sync_dist_group = هیچ، add_dataloader_idx = هیچ، add_dataloader_idx=هیچ، rank_zero_only = نادرست) [منبع]
ثبت یک کلید، جفت ارزش.
رفتار پیشفرض در هر هوک در اینجا مستند شده است: ثبت خودکار.
نام ¶ ( str ) – کلید ورود.
مقدار ¶ ( اتحادیه [ متریک , تانسور , int , شناور , نقشه برداری [ str , Union [ متریک , تانسور , int , float ]]] – مقدار برای ورود. می تواند یک شناور، تانسور، متریک یا فرهنگ لغت اولی باشد.
prog_bar ¶ (bool) - اگر True به نوار پیشرفت وارد شود.
logger ¶ (bool) – اگر True به Logger وارد شود.
on_step ¶ ( اختیاری [ bool ]) - اگر True در این مرحله ثبت شود. مقدار پیش فرض توسط قلاب تعیین می شود. برای جزئیات به ثبت خودکار مراجعه کنید.
on_epoch ¶ (اختیاری [ bool ]) – اگر گزارشهای True epoch متریکها را جمعآوری کرده باشد. مقدار پیش فرض توسط قلاب تعیین می شود. برای جزئیات به ثبت خودکار مراجعه کنید.
readed_fx ¶ (اتحادیه [STR ، قابل تماس]) - عملکرد کاهش بیش از مقادیر مرحله برای پایان دوره. torch. mean () به طور پیش فرض.
ENABLE_GRAPH ¶ (BOOL) - اگر درست باشد ، نمودار را جدا نمی کند.
sync_dist ¶ (bool) - اگر درست باشد ، متریک را در بین دستگاه ها کاهش می دهد. استفاده از مراقبت زیرا این ممکن است منجر به ارتباطی قابل توجهی شود.
sync_dist_group ¶ (اختیاری [هر]) - گروه DDP برای همگام سازی.
add_dataloader_idx ¶ (BOOL) - اگر درست باشد ، شاخص Dataloader فعلی را به نام (هنگام استفاده از چندین Dataloaders) اضافه می کند. اگر نادرست است ، کاربر باید برای هر Dataloader نام های منحصر به فردی ارائه دهد تا مقادیر را مخلوط نکند.
batch_size ¶ (اختیاری [int]) - batch_size فعلی. این به طور مستقیم از دسته بارگذاری شده استنباط می شود ، اما برای برخی از ساختارهای داده ممکن است صریحاً آن را تهیه کنید.
Metric_Attribute ¶ (اختیاری [STR]) - برای بازگرداندن حالت متریک ، صاعقه نیاز به مرجع Torchmetrics. Metric در مدل شما دارد. اگر این یک ویژگی مدل باشد ، این به طور خودکار یافت می شود.
RANK_ZERO_ONLY ¶ (BOOL) - آیا این مقدار فقط در رتبه 0 وارد خواهد شد. این امر از همگام سازی جلوگیری می کند که باعث ایجاد بن بست می شود زیرا همه فرآیندها این تماس ورود به سیستم را انجام نمی دهند.
log_dict¶
LightningModule.[منبع]
یک فرهنگ لغت مقادیر را به طور همزمان وارد کنید.
فرهنگ لغت ¶ (نقشه برداری [STR ، اتحادیه [متریک ، تانسور ، INT ، شناور ، نقشه برداری [STR ، اتحادیه [متریک ، تانسور ، int ، float]]]]]) - جفت ارزش کلیدی. مقادیر می تواند یک شناور ، تنش ، متریک یا فرهنگ لغت سابق باشد.
PROG_BAR ¶ (BOOL) - در صورت ورود واقعی به پایگاه پیشرفت.
logger ¶ (bool) – اگر True به Logger وارد شود.
on_step ¶ (اختیاری [BOOL]) - اگر در این مرحله سیاهههای واقعی انجام شود. هیچ یک از برنامه های خودکار برای Training_Step اما اعتبار سنجی/test_step نیست. مقدار پیش فرض توسط قلاب تعیین می شود. برای جزئیات بیشتر به ورود خودکار مراجعه کنید.
on_epoch ¶ (اختیاری [BOOL]) - اگر معیارهای انباشته شده Epoch True Logs. هیچ یک از برنامه های خودکار برای مرحله Val/Test اما آموزش_ نیست. مقدار پیش فرض توسط قلاب تعیین می شود. برای جزئیات بیشتر به ورود خودکار مراجعه کنید.
readed_fx ¶ (اتحادیه [STR ، قابل تماس]) - عملکرد کاهش بیش از مقادیر مرحله برای پایان دوره. torch. mean () به طور پیش فرض.
Enable_graph ¶ (bool)-اگر درست باشد ، نمودار را خودکار نمی کند
sync_dist ¶ (bool) - اگر درست باشد ، متریک را در سراسر GPU/TPU کاهش می دهد. استفاده از مراقبت زیرا این ممکن است منجر به ارتباطی قابل توجهی شود.
sync_dist_group ¶ (اختیاری [هر]) - گروه DDP برای همگام سازی.
add_dataloader_idx ¶ (bool) - اگر درست باشد ، شاخص Dataloader فعلی را به نام (هنگام استفاده از چندین) اضافه می کند. اگر نادرست است ، کاربر باید برای هر dataloader نام های منحصر به فردی ارائه دهد تا مقادیر را مخلوط نکند.
batch_size ¶ (اختیاری [int]) - اندازه دسته فعلی. این به طور مستقیم از دسته بارگذاری شده استنباط می شود ، اما برخی از ساختارهای داده ممکن است به صراحت آن را ارائه دهند.
RANK_ZERO_ONLY ¶ (BOOL) - آیا این مقدار فقط در رتبه 0 وارد خواهد شد. این امر از همگام سازی جلوگیری می کند که باعث ایجاد بن بست می شود زیرا همه فرآیندها این تماس ورود به سیستم را انجام نمی دهند.
lr_schedulers¶
برنامه ریزی (های) نرخ یادگیری را که در طول آموزش استفاده می شود ، برمی گرداند. برای بهینه سازی دستی مفید است.
اتحادیه [هیچکدام ، لیست [اتحادیه [_lrscheduler ، Reducelronplateau]] ، _lrscheduler ، Residucelronplateau]
یک برنامه ریز واحد یا لیستی از برنامه ریزان در صورت وجود چندین نفر ، یا هیچ یک از آنها در صورت بازگشت برنامه ریزی در Configure_Optimizer ().
manual_backward¶
هنگام انجام بهینه سازی به صورت دستی ، این کار را مستقیماً از Training_step () خود تماس بگیرید. با استفاده از این ، رعد و برق می تواند اطمینان حاصل کند که تمام مقیاس بندی مناسب هنگام استفاده از دقت مختلط اعمال می شود.
برای مثال های بیشتر به بهینه سازی دستی مراجعه کنید.
ضرر ¶ (تانسور) - تانسور که برای محاسبه شیب. باید یک نمودار وصل شود.
*args ¶ - استدلال های موقعیتی اضافی که باید به عقب ارسال شود ()
** kwargs ¶ - استدلال های کلمه کلیدی اضافی که باید به عقب ارسال شود ()
بهینه سازها
بهینه ساز (های) مورد استفاده در طول آموزش را برمی گرداند. برای بهینه سازی دستی مفید است.
use_pl_optimizer ¶ (bool) - در صورت صحت ، بهینه ساز (ها) را در یک رعد و برق برای کنترل خودکار دقت و پروفایل می پیچید.
یک بهینه ساز واحد یا لیستی از بهینه سازها در صورت وجود چندین مورد.
چاپ¶
چاپ فقط از فرآیند 0. از این حالت در هر حالت توزیع شده استفاده کنید تا فقط یک بار وارد شوید.
*args ¶ - چیزی که برای چاپ است. همان عملکرد چاپ داخلی پایتون.
** Kwargs ¶-همان عملکرد چاپ داخلی پایتون.
PREPTICT_STEP¶
تابع مرحله ای که در طول پیش بینی () نامیده می شود. به طور پیش فرض ، آن را به جلو () فراخوانی می کند. برای افزودن هرگونه منطق پردازش ، نادیده بگیرید.
از Predict_Step () برای مقیاس استنباط در چند دستگاه استفاده می شود.
برای جلوگیری از خطای OOM ، می توان از پاسخ به تماس با BasePredictionWriter برای نوشتن پیش بینی ها در دیسک یا پایگاه داده بعد از هر دسته یا در انتهای دوره استفاده کرد.
BasePredictionWriter باید هنگام استفاده از شتاب دهنده مبتنی بر تخم ریزی استفاده شود. این اتفاق برای مربی (استراتژی = "ddp_spawn") یا آموزش در 8 هسته TPU با مربی (Accelerator = "TPU" ، دستگاه ها = 8) اتفاق می افتد ، زیرا پیش بینی ها بازگردانده نمی شوند.
دسته ¶ (هر) - دسته فعلی.
batch_idx ¶ (int) - فهرست دسته فعلی.
dataloader_idx ¶ (int) - فهرست Dataloader فعلی.
save_hyperparameters¶
آرگومان ها را به ویژگی HPARAMS ذخیره کنید.
args ¶ (هر) - یک شیء واحد از DICT ، فضای نام یا OMEGACONF یا نام یا استدلال های رشته ای از کلاس __init__
نادیده گرفتن ¶ (اتحادیه [دنباله [str] ، str ، هیچکدام]) - نام استدلال یا لیستی از نام های آرگومان از کلاس __init__ نادیده گرفته می شود
قاب ¶ (اختیاری [فریم]) - یک شیء فریم. پیش فرض هیچ کدام نیست
Logger ¶ (BOOL) - آیا HyperParameters را به Logger ارسال کنید. پیش فرض: درست است
toggle_optimizer¶
اطمینان حاصل می کند که فقط شیب پارامترهای بهینه ساز فعلی در مرحله آموزش محاسبه می شود تا از شیب های آویزان در تنظیم چند گزینه ای جلوگیری شود.
این فقط به طور خودکار هنگام فعال سازی خودکار و استفاده از بهینه سازهای متعدد نامیده می شود. این کار با untoggle_optimizer () کار می کند تا مطمئن شوید param_requires_grad_state به درستی تنظیم مجدد است.
Optimizer ¶ (Union [Optimizer ، LightningOptimizer]) - بهینه ساز برای جابجایی.
Optimizer_idx ¶ (int) - شاخص بهینه ساز برای جابجایی.
test_step¶
بر روی یک دسته از داده ها از مجموعه آزمون کار می کند. در این مرحله شما به طور معمول نمونه هایی را تولید کرده اید یا هر چیزی از علاقه مانند دقت را محاسبه می کنید.
BATCH ¶ - خروجی Dataloader شما.
batch_idx ¶ - شاخص این دسته.
dataloader_id ¶ - شاخص Dataloader که این دسته را تولید می کند.(فقط در صورت استفاده از Dataloaders تست چندگانه).
هر شیء یا ارزش
هیچ - تست به دسته بعدی می رود
اگر در Dataloaders چندین آزمون عبور کنید ، Test_Step () یک آرگومان اضافی خواهد داشت. توصیه می کنیم مقدار پیش فرض 0 را تنظیم کنید تا بتوانید به سرعت بین dataloaders تک و چندگانه جابجا شوید.
اگر نیازی به آزمایش ندارید ، نیازی به اجرای این روش ندارید.
هنگامی که test_step () خوانده می شود ، مدل در حالت EVAL قرار داده شده و شیب های Pytorch غیرفعال شده اند. در پایان دوره آزمون ، مدل به حالت آموزش برمی گردد و شیب ها فعال می شوند.
test_step_end¶
هنگام تست با DP از این استفاده کنید زیرا test_step () فقط در بخشی از دسته کار می کند. با این حال ، این هنوز اختیاری است و فقط برای مواردی مانند SoftMax یا از دست دادن NCE مورد نیاز است.
اگر بعداً به DDP یا حالت دیگری تغییر دهید ، این کار هنوز هم خوانده می شود تا نیازی به تغییر کد خود نباشید.
Step_Output ¶ - آنچه در Test_Step () برای هر قسمت دسته ای برمی گردید.
هیچ یا هر چیز دیگری
برای اطلاعات بیشتر به راهنمای آموزش چند GPU مراجعه کنید.
test_epoch_end¶
در انتهای یک دوره آزمایش با خروجی تمام مراحل آزمون فراخوانده شد.
Outputs ¶ (اتحادیه [لیست [اتحادیه [Tensor ، DICT [STR ، هر]]] ، لیست [لیست [اتحادیه [Tensor ، DICT [STR ، هر]]]]] - لیست خروجی هایی که در test_step_end تعریف کرده اید () ،یا اگر چندین Dataloaders وجود دارد ، لیستی که شامل لیستی از خروجی ها برای هر Dataloader است
اگر شما یک test_step () را تعریف نکردید ، این مورد فراخوانی نمی شود.
با یک dataloader واحد:
با وجود چندین Dataloaders ، خروجی ها لیستی از لیست ها خواهند بود. لیست بیرونی شامل یک ورودی برای هر dataloader است ، در حالی که لیست داخلی شامل خروجی های جداگانه هر مرحله آزمون برای آن dataloader است.
to_onnx¶
مدل را در قالب ONNX ذخیره می کند.
File_Path ¶ (اتحادیه [STR ، PATH]) - مسیر پرونده مدل ONNX باید در آن ذخیره شود.
input_sample ¶ (اختیاری [هر]) - ورودی برای ردیابی. پیش فرض: هیچکدام (از self. example_input_array استفاده کنید)
** Kwargs ¶ - به عملکرد Torch. onnx. export منتقل می شود.
to_torchscript¶
LightningModule. to_torchscript (file_path = هیچ ، روش = 'script' ، مثال_Inputs = هیچ ، ** kwargs) [منبع]
به طور پیش فرض کل مدل را به یک اسکریپت module کامپایل می کند. اگر می خواهید از ردیابی استفاده کنید ، لطفاً روش آرگومان = "ردیابی" را ارائه دهید و اطمینان حاصل کنید که یا آرگومان مثال_ینپوتس ارائه شده است ، یا مدل دارای مجموعه setsual_input_array است. اگر می خواهید ماژول هایی را که نوشته شده است سفارشی کنید ، باید این روش را نادیده بگیرید. در صورتی که می خواهید چندین ماژول را برگردانید ، توصیه می کنیم از یک فرهنگ لغت استفاده کنید.
file_path ¶ (اتحادیه [str ، مسیر ، هیچ]) - مسیری که برای نجات مشعل. پیش فرض: هیچکدام (بدون فایل ذخیره نشده).
روش ¶ (اختیاری [STR]) - آیا از اسکریپت یا روش ردیابی Torchscript استفاده کنید. پیش فرض: "اسکریپت"
مثال_Inputs ¶ (اختیاری [هر]) - ورودی برای انجام ردیابی در هنگام تنظیم "ردیابی" استفاده می شود. پیش فرض: هیچکدام (از مثال_ input_array استفاده می کند)
** kwargs ¶ - استدلال های اضافی که به تابع torch. jit. script () یا torch. jit. trace () منتقل می شود.
نیاز به اجرای روش Forward () دارد.
اسکریپت صادر شده روی حالت ارزیابی تنظیم می شود.
توصیه می شود برای استفاده از این ویژگی بدون محدودیت، آخرین نسخه پشتیبانی شده PyTorch را نصب کنید. همچنین به مستندات torch. jit برای ویژگی های پشتیبانی شده مراجعه کنید.
این LightningModule به عنوان یک اسکریپت مشعل، صرف نظر از اینکه file_path تعریف شده است یا خیر.
آموزش_گام¶
در اینجا شما ضرر آموزش و برخی معیارهای اضافی را برای مثال محاسبه و برمیگردانید. نوار پیشرفت یا لاگر.
دسته ¶ (Tensor | (Tensor,…) | [Tensor,…]) – خروجی DataLoader شما. یک تانسور، تاپل یا فهرست.
batch_idx ¶ ( int ) - شاخص نمایش عدد صحیح این دسته
optimizer_idx ¶ ( int ) - هنگام استفاده از چند بهینه ساز، این آرگومان نیز وجود خواهد داشت.
hiddens ¶ ( Any ) – Passed in if truncated_bptt_steps >0.
تانسور - تانسور از دست دادن
دیکته - یک فرهنگ لغت. می تواند شامل هر کلیدی باشد، اما باید شامل کلید "از دست دادن" باشد
این برای چند GPU، TPU، IPU یا DeepSpeed پشتیبانی نمیشود.
در این مرحله معمولاً پاس رو به جلو را انجام می دهید و ضرر را برای یک دسته محاسبه می کنید. همچنین میتوانید کارهای جالبتری مانند پاسهای چندگانه به جلو یا چیزهای خاص انجام دهید.
اگر چند بهینه ساز تعریف کنید، این مرحله با پارامتر optimizer_idx اضافی فراخوانی می شود.
اگر در طول زمان انتشار عقب کوتاه شده را اضافه کنید، یک آرگومان اضافی با حالت های پنهان مرحله قبل نیز دریافت خواهید کرد.
مقدار تلفات نشان داده شده در نوار پیشرفت نسبت به آخرین مقادیر هموار (متوسط) می شود، بنابراین با ضرر واقعی برگشتی در مرحله قطار/ اعتبارسنجی متفاوت است.
When accumulate_grad_batches >1، ضرر بازگردانده شده در اینجا به طور خودکار توسط accumulate_grad_batches به صورت داخلی عادی می شود.
آموزش_گام_پایان¶
هنگام آموزش با dp از این استفاده کنید زیرا training_step() تنها در بخشی از دسته عمل می کند. با این حال، این هنوز اختیاری است و فقط برای مواردی مانند softmax یا از دست دادن NCE مورد نیاز است.
اگر بعداً به ddp یا حالت دیگری بروید، این حالت همچنان فراخوانی میشود تا مجبور نباشید کد خود را تغییر دهید.
step_output ¶ ( Union [ Tensor , Dict [ str , Any ]]) – آنچه را که در training_step برای هر قسمت دسته ای برمی گردانید.
هنگام استفاده از استراتژی DP، تنها بخشی از دسته در داخل training_step است:
اگر می خواهید کاری را با تمام قسمت های دسته انجام دهید، از این روش برای انجام آن استفاده کنید:
برای اطلاعات بیشتر به راهنمای آموزش چند GPU مراجعه کنید.
train_epoch_end¶
فراخوانی در پایان دوره آموزشی با خروجی تمام مراحل آموزشی. در صورتی که نیاز به انجام کاری با تمام خروجی های بازگردانده شده توسط training_step() دارید از این استفاده کنید.
outputs ¶ ( List [ Union [ Tensor , Dict [ str , Any ]]]) – List of outputs you defined in training_step() . If there are multiple optimizers or when using truncated_bptt_steps >0، لیست ها دارای ابعاد (n_batches، tbptt_steps، n_optimizers) هستند. ابعاد طول 1 فشرده شده است.
اگر این روش لغو نشود، این فراخوانی نخواهد شد.
یخ زدایی کنید¶
تمام پارامترها را برای آموزش از حالت انجماد خارج کنید.
untoggle_optimizer¶
وضعیت گرادیان های مورد نیاز را که با toggle_optimizer() تغییر داده شده اند، بازنشانی می کند.
این تنها زمانی به صورت خودکار فراخوانی می شود که بهینه سازی خودکار فعال باشد و از چند بهینه ساز استفاده شود.
optimizer_idx ¶ (int) - شاخص بهینهساز برای بازکردن.
مرحله_ اعتبارسنجی¶
روی یک دسته از داده ها از مجموعه اعتبار سنجی کار می کند. در این مرحله میتوانید نمونههایی را ایجاد کنید یا هر چیزی که مورد علاقه است مانند دقت را محاسبه کنید.
BATCH ¶ - خروجی Dataloader شما.
batch_idx ¶ - شاخص این دسته.
dataloader_idx ¶ - شاخص داده بارگیری که این دسته را تولید کرده است.(فقط در صورتی که از چندین بار داده val استفاده شده باشد)