• 0

ما المقصود ب logits وما الفرق بين softmax و softmax_cross_entropy_with_logits

في التوثيق الخاص بالدالة softmax في تنسرفلو يتم تعريف الدالة بالشكل التالي :

tf.nn.softmax(
    logits, axis=None, name=None
)
# أيضاً هناك دالة أخرى معرفة بالشكل التالي
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

ما المقصود بال logits وما الفرق بين الدالتين السابقتين؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 2

أولاً logits في الرياضيات هي دالة تقوم بتعيين الاحتمالات [0 ، 1] إلى [-inf ، + inf]. ثانياً لاترتبك من الاسم، ال logits في تنسرفلو هي فقط مخرجات الطبقة الأخيرة من نموذجك وتمت تسميتها بهذا الاسم كون مخرجات الطبقة الأخيرة من النموذج لاتكون قيم احتمالية وإنما تكون قيم من [-inf, +inf] أي أن مجموعها لايساوي 1. وعند تمرير هذه ال logits  (مخرجات الطبقة الأخيرة من نموذجك) إلى دالة التنشيط Softmax تصبح قيم هذه ال logits احتمالية أي قيمها بين 0 و 1 ومجموعها كلها يساوي 1. هذا كل شيئ. وفي التوثيق الرسمي لتنسرفلو هذا ماتم شرحه عنها: "هي Tensor غير فارغة "  non-empty Tensor " ويجب أن تكون من أحد الأنماط التالية half, float32, float64." الآن بالنسبة ل tf.nn.softmax فهي دالة ال softmax التي نعرفها جميعاً (وفي حال لن تكن على دراية بها يمكنك الذهاب إللى الرابط في الأسفل) :

import tensorflow as tf
import numpy as np
logits = tf.constant(np.array([[.1, .3, .5, .9]])) # الدخل هو قيم غير محدودة
print((tf.nn.softmax(logits)))
# لاحظ أن الخرج أصبح قيم احتمالية بين 0 و1
# tf.Tensor([[0.16838508 0.205666   0.25120102 0.37474789]], shape=(1, 4), dtype=float64)

أما بالنسبة ل tf.nn.softmax_cross_entropy_with_logits فهي تطبق الدالة السابقة على ال logits ثم تطبق  cross_entropy على خرجه، أي:   <<< افترض أن لديك فهم للانتروبيا المتقطعة في نظرية المعلومات>>>

sm = tf.nn.softmax(x)
ce = cross_entropy(sm)
# وفي تنسرفلو يتم دمج هاتين العمليتين كالتالي
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

وتستخدم كدالة تكلفة cost  حيث يقيس الخطأ الاحتمالي في مهام التصنيف المنفصلة أي  التي تكون فيها الفئات متنافية (كل إدخال في فئة واحدة بالضبط). على سبيل المثال ، يتم تصنيف كل صورة على أنها كلب أو قطة وليس كلاهما.  وطبعاً كون الفئات متنافية فهذا لايعني بالضرورة أن تكون احتمالاتها متنافية. وكل مايهمنا هو أن يكون التوزيع الاحتمالي لاحتمالاتها صالحاً (أي مجموع ال label يساوي 1) على سبيل المثال:

logits = [[4.0, 2.0, 1.0], [0.0, 5.0, 1.0]]
labels = [[1.0, 0.0, 0.0], [0.0, 0.8, 0.2]]
tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
# <tf.Tensor: shape=(2,), dtype=float32, numpy=array([0.16984604, 0.82474494], dtype=float32)>

ويجب أن تكون كل من label و logits من نفس الأبعاد أي [batch_size, num_classes].
افرض المثال التالي، لدينا مصفوفتي tensor الأولى هي قيم y_hat ولتكن تساوي y = W*x +b أي الأوزان التدريبية مضروبة بالدخل مجموعة على الانحراف (أي القيم المتوقعة من دون إدخالها في دالة تنشيط أي logits)، وو y_true هي القيم الحقيقية.

y_hat  = ... # Predicted label, e.g. y = tf.matmul(X, W) + b
y_true = ... # True label, one-hot encoded

وبالتالي يكون مقدار الخطأ الكلي للانتروبيا المتقطعة يساوي إلى :

y_hat_softmax = tf.nn.softmax(y_hat)
total_loss = tf.reduce_mean(-tf.reduce_sum(y_true * tf.log(y_hat_softmax), [1]))

وهو مايكافئ الدالة التالية في تنسرفلو:

total_loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y_hat, y_true))
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن