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

دالة الخسارة Binary Crossentropy في Kears

Meezo ML

السؤال

Recommended Posts

  • 4

هي دالة تكلفة (loss) في كيراس وتنسرفلو ويتم استخدامها مع مسائل التصنيف الثنائي أي عندما يكون الخرج 1 أو 0.
الصيغة الرياضية:
60db5574b502f_binarycrossentropy.thumb.png.cfa624069e40bff1caec5585e2fda992.png
تعتمد هذه الدالة على المفهوم الشهير في نظرية المعلومات والمعروف ب Cross Entropy أو الإنتروبيا المتقطعة، وهي مقياس لمدى تشابه توزعين احتماليين مختلفين لنفس الحدث وفي ال ML نستخدم هذا التعريف وقانونه لكي نقوم بحساب ال Loss (التكلفة Cost). حيث يكون الخرج الخاص بالشبكة العصبية هو توزيع احتمالي لعدة فئات classes.
تابع التنشيط Sigmoid هو تابع التنشيط الوحيد المتوافق مع دالة التكلفة Binary CE.
له الشكل التالي في كيراس:

#في كيراس BinaryCrossentropy  الكلاس 
tf.keras.losses.BinaryCrossentropy(
    from_logits=False,
    name="binary_crossentropy",
)
# True عندما يكون مجال القيم المتوقعة غير محدود
# False عندما يكون مجال القيم المتوقعة بين الصفر والواحد

مثال:

import tensorflow as tf
# إنشاء قيم حقيقية وفيم متوقعة
y_true = [1, 1, 0]
y_pred1 = [0.7, 0.61, 0.04] # قيم متوقعة بين 0 و 1
y_pred2 = [-11.2, 1.51, 3.94] # قيم متوقعة بين الناقص لانهاية والزائد لانهاية
# إنشاء كائن من هذا الكلاس
c1 = tf.keras.losses.BinaryCrossentropy(from_logits=False)
c2 = tf.keras.losses.BinaryCrossentropy(from_logits=True)
# استخدامه وطباعة الناتج
print(c1(y_true, y_pred1).numpy()) # 0.29726425
print(c2(y_true, y_pred2).numpy()) # 5.1196237

ولاستخدمها مع الدالة Compile:

# كالتالي compile لاستخدامه مع النموذج نقوم بتمريره إلى
model.compile(
  loss=tf.keras.losses.BinaryCrossentropy(),
  ...
)
# أو يمكن تمريرها بسهولة بالشكل التالي
model.compile(
     loss='binary_crossentropy',
     ...
)

في المثال التالي سأبين لك استخدامها، سوف أقوم ببناء Baseline لمسألة تصنيف مشاعر ثنائية مع مجموعة بيانات imdb:

# مثال بسيط
# تحميل وتجهيز البيانات
from keras.datasets import imdb
from keras import preprocessing
max_features = 100
maxlen = 20
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
x_train = preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = preprocessing.sequence.pad_sequences(x_test, maxlen=maxlen)
# بناء النموذج                                     
from keras.models import Sequential
from keras.layers import Flatten, Dense,Embedding
model = Sequential()
model.add(Embedding(10000, 8, input_length=maxlen))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
# تجميع النموذج
model.compile(optimizer='rmsprop', loss=tf.keras.losses.BinaryCrossentropy(from_logits=False), metrics=['acc']) # لاحظ كيف قمنا بتمرير دالة التكلفة 
# عرض ملخص للنموذج
model.summary()
# تدريب النموذج
history = model.fit(x_train, y_train,
epochs=2,
batch_size=32,
validation_split=0.2)
#----------------------------------------------------------
'''
Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, 20, 8)             80000     
_________________________________________________________________
flatten_1 (Flatten)          (None, 160)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 161       
=================================================================
Total params: 80,161
Trainable params: 80,161
Non-trainable params: 0
_________________________________________________________________
Epoch 1/2
625/625 [==============================] - 2s 2ms/step - loss: 0.6919 - acc: 0.5179 - val_loss: 0.6806 - val_acc: 0.5912
Epoch 2/2
625/625 [==============================] - 1s 2ms/step - loss: 0.6671 - acc: 0.6126 - val_loss: 0.6530 - val_acc: 0.6128

'''

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...