برای جلوگیری از مشکلات زیر آب هنگام محاسبه این مقدار ، این ضرر انتظار دارد که ورودی آرگومان در فضای ورود به سیستم باشد. اگر log_target = درست باشد ، ممکن است هدف آرگومان در فضای ورود به سیستم نیز ارائه شود.
به طور خلاصه ، این عملکرد تقریباً معادل محاسبات است
if نه log_target: # پیش فرض از دست دادن_ نقطه نظر = هدف * (هدف.ورود به سیستم() - ورودی) دیگر: از دست دادن_ نقطه نظر = هدف.بیرونی() * (هدف - ورودی)
و سپس بسته به کاهش استدلال ، این نتیجه را کاهش می دهد
if کاهش == "منظور داشتن": # پیش فرض ضرر - زیان = از دست دادن_ نقطه نظر.منظور داشتن() الیف کاهش == "batchmean": # ریاضی درست است ضرر - زیان = از دست دادن_ نقطه نظر.جمع() / ورودی.اندازه(0) الیف کاهش == "جمع": ضرر - زیان = از دست دادن_ نقطه نظر.جمع() دیگر: # کاهش == "هیچ" ضرر - زیان = از دست دادن_ نقطه نظر
به عنوان تمام ضررهای دیگر در Pytorch ، این عملکرد انتظار دارد که اولین آرگومان ، ورودی ، خروجی مدل (به عنوان مثال شبکه عصبی) و دوم ، هدف ، مشاهدات در مجموعه داده باشد. این با نماد ریاضی استاندارد K L (P ∣ ∣ q) Kl (P || q) K L (P ∣∣ Q) متفاوت است که در آن P P P نشان دهنده توزیع مشاهدات و Q Q q است.
کاهش = "معنی" مقدار واگرایی KL واقعی را بر نمی گرداند ، لطفاً از کاهش = "batchmean" استفاده کنید که با تعریف ریاضی هماهنگ است. در یک نسخه آینده ، "میانگین" تغییر خواهد کرد تا همان "Batchmean" باشد.
>>> وارد كردن torch. . functional as F >>> kl_loss = .کلوتلوس(کاهش="batchmean") >>> # ورودی باید توزیع در فضای ورود به سیستم باشد >>> ورودی = F.log_softmax(مشعل.رند(3, 5, نیاز به_گراد=درست است، واقعی), کم نور=1) >>> # نمونه ای از توزیع ها. معمولاً این از مجموعه داده می شود >>> هدف = F.نرم(مشعل.سر(3, 5), کم نور=1) >>> خروجی = kl_loss(ورودی, هدف) >>> kl_loss = .کلوتلوس(کاهش="batchmean", log_target=درست است، واقعی) >>> log_target = F.log_softmax(مشعل.سر(3, 5), کم نور=1) >>> خروجی = kl_loss(ورودی, log_target)
© کپی رایت 2022 ، همکاران Pytorch.
منصة التداول الأكثر ثقة...
برچسب :
نویسنده : احمد نجفی
بازدید : <-PostHit->