هدف از توابع از دست دادن محاسبه مقدار است که یک مدل باید به دنبال به حداقل رساندن در طول آموزش باشد.
ضررهای موجود
توجه داشته باشید که تمام ضررها هم از طریق دسته کلاس و هم از طریق یک دسته عملکرد در دسترس هستند. دسته کلاس شما را قادر می سازد آرگومان های پیکربندی را به سازنده منتقل کنید (به عنوان مثال LISS_FN = طبقه بندی crossentropy (from_logits = true)) ، و آنها را هنگام استفاده به صورت مستقل به طور پیش فرض انجام می دهند (جزئیات زیر را ببینید).
ضررهای احتمالی
- کلاس دوتایی
- کلاس طبقه بندی
- کلاس پراکنده crossentropy
- کلاس پواسون
- عملکرد binary_crossentropy
- عملکرد طبقه بندی شده_کروسنتروپی
- عملکرد پراکنده_کروسنتوری
- تابع پواسون
- کلاس kldivergence
- عملکرد KL_DIVERGENCE
ضرر و زیان رگرسیون
- به معنای کلاس QuaredError
- کلاس meanabsoluteerror
- کلاس meyabsolutepercentageerror
- به معنای کلاس QuaredLogarithericerror
- کلاس cosinesimilarity
- عملکرد متوسط_ squared_error
- عملکرد متوسط_ absolute_error
- عملکرد متوسط_ absolute_percentage_error
- عملکرد MEAN_SQUARED_LOGARTHMIC_ERROR
- عملکرد cosine_similarity
- کلاس هوبر
- عملکرد هوبر
- کلاس Logcosh
- عملکرد log_cosh
تلفات لولا برای طبقه بندی "حداکثر حاشیه"
- کلاس لولا
- کلاس مربع
- کلاس طبقه بندی
- تابع لولا
- تابع squared_hinge
- عملکرد طبقه بندی شده
استفاده از ضررها با کامپایل () و متناسب ()
عملکرد از دست دادن یکی از دو آرگومان مورد نیاز برای تهیه یک مدل KERAS است:
از جانب تانسور پر وارد كردن کروس از جانب tensorflow. keras وارد كردن لایه های مدل = کروس.متوالی() مدل.اضافه کردن(لایه های.متراکم(64, Keel_initializer='لباس فرم', input_shape=(10,))) مدل.اضافه کردن(لایه های.فعال سازی('softmax')) LOST_FN = کروس.تلفات.مقبره های پراکنده() مدل.گردآوری(ضرر - زیان=LOST_FN, بهینه کننده="آدم")
تمام توابع از دست دادن داخلی نیز ممکن است از طریق شناسه رشته آنها منتقل شوند:
# بهینه ساز با نام: از پارامترهای پیش فرض استفاده می شود مدل.گردآوری(ضرر - زیان='plate_categorial_crossentropy', بهینه کننده="آدم")
توابع از دست دادن به طور معمول با فوری یک کلاس از دست دادن (به عنوان مثال Keras. Losses. SparsecategoryCrossentropy) ایجاد می شوند. تمام تلفات نیز به عنوان دستگیره های عملکردی ارائه می شود (به عنوان مثال keras. losses. sparse_categorial_crossentropy).
استفاده از کلاسها شما را قادر می سازد آرگومان های پیکربندی را در زمان فوری ، به عنوان مثال: به عنوان مثال: عبور دهید.
LOST_FN = کروس.تلفات.مقبره های پراکنده(from_logits=درست است، واقعی)
استفاده مستقل از ضرر
ضرر با آرگومان های Loss_FN (y_true ، y_pred ، sample_weight = هیچ) قابل تماس است.
- y_true: مقادیر حقیقت زمین ، شکل (batch_size ، d0 ،. dn). برای توابع از دست دادن پراکنده ، مانند کراسپروپی طبقه ای پراکنده ، شکل باید باشد (batch_size ، d0 ،. dn-1)
- y_pred: مقادیر پیش بینی شده ، شکل (batch_size ، d0 ، .. dn).
- Sample_weight: اختیاری نمونه_ وزن به عنوان ضریب وزنی کاهش برای تلفات هر نمونه عمل می کند. اگر یک مقیاس ارائه شود ، ضرر به سادگی با مقدار داده شده مقیاس می شود. اگر Sample_weight یک تانسور با اندازه [batch_size] باشد ، پس از بین رفتن کل برای هر نمونه از دسته توسط عنصر مربوطه در وکتور وزنه برداری نجات می یابد. اگر شکل نمونه_ وزن باشد (batch_size ، d0 ، dn-1) (یا می توان به این شکل پخش کرد) ، پس هر عنصر ضرر y_pred با مقدار مربوطه نمونه_ وزن مقیاس می شود.(توجه داشته باشید در مورد DN-1: تمام توابع از دست دادن با 1 بعد کاهش می یابد ، معمولاً محور = -1.)
به طور پیش فرض ، توابع از دست دادن یک مقدار از دست دادن مقیاس در هر نمونه ورودی را برمی گرداند ، به عنوان مثال
>>>tf. keras. losses. mean_squared_error (tf. ones ((2 ، 2 ،)) ، tf. zeros ((2 ، 2)))
با این حال ، نمونه های کلاس از دست دادن یک آرگومان سازنده کاهش را نشان می دهد ، که پیش فرض "sum_over_batch_size" (یعنی میانگین) است. مقادیر مجاز "sum_over_batch_size" ، "جمع" و "هیچ یک" هستند:
- "sum_over_batch_size" به این معنی است که نمونه ضرر میانگین ضررهای هر نمونه را در دسته باز می گرداند.
- "جمع" به این معنی است که نمونه ضرر ، مبلغ ضررهای هر نمونه را در دسته باز می گرداند.
- "هیچ یک" به این معنی است که نمونه ضرر و زیان آرایه کامل ضررهای هر نمونه را برمی گرداند.
>>> loss_fn = tf.keras.losses.MeanSquaredError(reduction='sum_over_batch_size')>>>LISS_FN (tf. ones ((2 ، 2 ،)) ، tf. zeros ((2 ، 2)))
>>> loss_fn = tf.keras.losses.MeanSquaredError(reduction='sum')>>>LISS_FN (tf. ones ((2 ، 2 ،)) ، tf. zeros ((2 ، 2)))
>>> loss_fn = tf.keras.losses.MeanSquaredError(reduction='none')>>>LISS_FN (tf. ones ((2 ، 2 ،)) ، tf. zeros ((2 ، 2)))
توجه داشته باشید که این یک تفاوت مهم بین توابع از دست دادن مانند tf. keras. losses. mean_squared_error و موارد پیش فرض کلاس از دست دادن مانند tf. keras. losses. meansquarederror: نسخه عملکرد کاهش نمی یابد ، اما به طور پیش فرض نمونه کلاس است.
>>> loss_fn = tf.keras.losses.mean_squared_error>>>LISS_FN (tf. ones ((2 ، 2 ،)) ، tf. zeros ((2 ، 2)))
>>> loss_fn = tf.keras.losses.MeanSquaredError()>>>LISS_FN (tf. ones ((2 ، 2 ،)) ، tf. zeros ((2 ، 2)))
هنگام استفاده از FIT () ، این تفاوت بی ربط است زیرا کاهش توسط چارچوب انجام می شود.
در اینجا نحوه استفاده از یک نمونه کلاس از دست دادن به عنوان بخشی از یک حلقه آموزش ساده آورده شده است:
LOST_FN = tf.کروس.تلفات.کروسنتروپی(from_logits=درست است، واقعی) بهینه کننده = tf.کروس.بهینه کننده.آدم() # بیش از دسته های یک مجموعه داده تکرار کنید. برای x, y in مجموعه داده: با tf.شکل() as نوار: ورود = مدل(x) # مقدار ضرر را برای این دسته محاسبه کنید. LISS_VALUE = LOST_FN(y, ورود) # وزن مدل را به روز کنید تا مقدار از دست دادن به حداقل برسد. شیب = نوار.شیب(LISS_VALUE, مدل.وزنهای قابل آموزش) بهینه کننده.Apply_gradients(زیپ(شیب, مدل.وزنهای قابل آموزش))
ایجاد ضررهای سفارشی
هرگونه تماس با Signature Loss_FN (y_true ، y_pred) که مجموعه ای از ضررها را برمی گرداند (یکی از نمونه ها در دسته ورودی) می تواند برای کامپایل () به عنوان ضرر منتقل شود. توجه داشته باشید که وزن نمونه به طور خودکار برای هرگونه ضرر پشتیبانی می شود.
در اینجا یک مثال ساده وجود دارد:
دنباله my_loss_fn(y_true, y_pred): squared_difference = tf.مربع(y_true - y_pred) برگشت tf._منه را کاهش دهید(squared_difference, محور=-1) # توجه داشته باشید `محور = -1` مدل.گردآوری(بهینه کننده="آدم", ضرر - زیان=my_loss_fn)
ADD_LOSS () API
توابع از دست دادن اعمال شده برای خروجی یک مدل تنها راه ایجاد ضرر نیست.
هنگام نوشتن روش تماس یک لایه سفارشی یا یک مدل زیر طبقه ، ممکن است بخواهید مقادیر مقیاس پذیر را که می خواهید در طول آموزش به حداقل برسانید محاسبه کنید (به عنوان مثال ضررهای منظم). برای پیگیری چنین شرایط ضرر می توانید از روش لایه add_loss () استفاده کنید.
در اینجا نمونه ای از یک لایه وجود دارد که بر اساس هنجار L2 ورودی ها ، ضرر تنظیم مجدد پراکنده را اضافه می کند:
از جانب tensorflow. keras. layers وارد كردن لایه طبقه myactivitivitarizer(لایه): "" "لایه ای که باعث ایجاد یک فعالیت از دست دادن منظم است." "" " دنباله __init__(خود, نرخ=1E-2): فوق العاده().__init__() خود.نرخ = نرخ دنباله زنگ زدن(خود, ورودی): # ما برای ایجاد ضرر منظم از "add_loss" استفاده می کنیم # این به ورودی ها بستگی دارد. خود.add_loss(خود.نرخ * tf.کاهش_(tf.مربع(ورودی))) برگشت ورودی
مقادیر ضرر اضافه شده از طریق add_loss را می توان در ویژگی لیست . losses هر لایه یا مدل بازیابی کرد (آنها به صورت بازگشتی از هر لایه زیرین بازیابی می شوند):
از جانب tensorflow. keras وارد كردن لایه های طبقه پراکنده(لایه): "" "پشته لایه های خطی با از دست دادن تنظیم منظم." "" دنباله __init__(خود, output_dim): فوق العاده().__init__() خود.متراکم_ 1 = لایه های.متراکم(32, فعال سازی=tf..رگ) خود.منظم سازی = myactivitivitarizer(1E-2) خود.DENSE_2 = لایه های.متراکم(output_dim) دنباله زنگ زدن(خود, ورودی): x = خود.متراکم_ 1(ورودی) x = خود.منظم سازی(x) برگشت خود.DENSE_2(x) MLP = پراکنده(1) y = MLP(tf.اونس((10, 10))) چاپ(MLP.تلفات) # لیست حاوی یک مقیاس float32
این ضررها در ابتدای هر پاس رو به جلو توسط لایه سطح بالا پاک می شوند-آنها جمع نمی شوند. بنابراین Layer. Losses همیشه حاوی ضررهای ایجاد شده در آخرین پاس رو به جلو است. شما معمولاً با جمع بندی آنها قبل از محاسبه شیب خود هنگام نوشتن یک حلقه آموزشی ، از این ضررها استفاده می کنید.
# ضرر با پاس * آخرین * به جلو مطابقت دارد. MLP = پراکنده(1) MLP(tf.اونس((10, 10))) ادعا کردن لن(MLP.تلفات) == 1 MLP(tf.اونس((10, 10))) ادعا کردن لن(MLP.تلفات) == 1 # بدون تجمع.
هنگام استفاده از model. fit () ، چنین شرایط ضرر به طور خودکار انجام می شود.
هنگام نوشتن یک حلقه آموزش سفارشی ، باید این اصطلاحات را با دست از Model. losses بازیابی کنید ، مانند این:
LOST_FN = tf.کروس.تلفات.کروسنتروپی(from_logits=درست است، واقعی) بهینه کننده = tf.کروس.بهینه کننده.آدم() # بیش از دسته های یک مجموعه داده تکرار کنید. برای x, y in مجموعه داده: با tf.شکل() as نوار: # پاس رو به جلو. ورود = مدل(x) # مقدار ضرر برای این دسته. LISS_VALUE = LOST_FN(y, ورود) # شرایط ضرر اضافی را به مقدار ضرر اضافه کنید. LISS_VALUE += جمع(مدل.تلفات) # وزن مدل را به روز کنید تا مقدار از دست دادن به حداقل برسد. شیب = نوار.شیب(LISS_VALUE, مدل.وزنهای قابل آموزش) بهینه کننده.Apply_gradients(زیپ(شیب, مدل.وزنهای قابل آموزش))
فارکس بازار مدرن...
ما را در سایت فارکس بازار مدرن دنبال می کنید
برچسب :
نویسنده : امین زندگانی
بازدید : <-PostHit->
تاريخ : دوشنبه
23 مرداد
1402 ساعت: 14:45