اذهب إلى المحتوى

السؤال

نشر

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

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

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

Recommended Posts

  • 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))

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...