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

المعيار BinaryAccuracy في كيراس Keras

Meezo ML

السؤال

Recommended Posts

  • 2

تقوم هذه الدالة بحساب مدى دقة النموذج، وتستخدم مع مهام التصنيف الثنائي، وتختلف عن مقياس الدقة accuracy (يمكنك الاطلاع عليها من الرابط في الأسفل) في أنها تسمح لنا بتحديد عتبة للتوقع أي ال "threshold" أي تعطينا قدرة أكبر في التحكم بعملية التوقع، وترد هذه الدالة قيمة عشرية بين 0 و 1 بحيث كلما اقتربت القيمة من 1 كانت دقة النموذج أعلى. وتماماً كما في الدالة Accuracy تقوم هذه الدالة بحساب عدد المرات التي قام فيها نموذجنا بتوقع القيم بشكل صحيح (عدد مرات الإصابة في التنبؤ أو بمعنى آخر عدد مرات التطابق) وتقسمها على عدد التوقعات الكلية (الصحيحة والخاطئة أي حالات التطابق وعدم التطابق). والمثال التالي سيوضح كل شيء، حيث قمت في البداية بكتابة كود بشكل يدوي لتحقيق هذا التابع ثم استخدمت كيراس:

import numpy as np
import tensorflow as tf
# إنشاء مصفوفتين واحدة تمثل القيم المتوقعة والأخرى الحقيقية
yTrue = np.array([[1],[0],[0],[1],[1]]) 
print("yTrue: ",yTrue,sep="\n")
Pred = np.array([[0.6],[0.2],[0.4],[0.95],[1.0]]) 
print("Pred: ",Pred,sep="\n")
Threshold = 0.5
# تابع لمدا لتعيين 1 في حالة كانت القيمة المتوقعة أكبر من العتبة و0 إذا كانت أقل منها
pM = lambda x : 0 if x <= Threshold else 1
# تطبيق التابع السابق على كل العينات
yPred = Pred.astype(int)
for i in range(len(yPred)):
  yPred[i] = pM(Pred[i])
print("predicted values: ",yPred,sep="\n")
print("accurately predicted : ",sum(yPred == yTrue),sep="\n")
print("len: ",len(yPred))
# الآن نقوم بقسمة عدد العينات التي تم توقعها بشكل صحيح على العدد الكلي للعينات
BinaryAccuracy = sum(yPred == yTrue)/len(yPred)
# باستخدام كيراس Binary Accuracy حساب
metric = tf.keras.metrics.BinaryAccuracy(threshold = Threshold)
metric.update_state(yTrue,yPred)
metric.result().numpy()
"""
yTrue: 
[[1]
 [0]
 [0]
 [1]
 [1]]
Pred: 
[[0.6 ]
 [0.2 ]
 [0.4 ]
 [0.95]
 [1.  ]]
predicted values: 
[[1]
 [0]
 [0]
 [1]
 [1]]
accurately predicted : 
[5]
len:  5
1.0 # 100%
"""

هذه الدالة لها الشكل التالي في كيراس:

tf.keras.metrics.BinaryAccuracy(
    name="binary_accuracy", dtype=None, threshold=0.5
)
# threshold هي العتبة

ويمكننا استخدامها في نماذجنا مع الدالة compile كالتالي:

model.compile(optimizer='sgd',
              loss='mse',
              metrics=[tf.keras.metrics.BinaryAccuracy()])
# أو
model.compile(optimizer='sgd',
              loss='mse',
              metrics=["BinaryAccuracy"])

انظر للمثال التالي، حيث سأستخدمها مع مسألة تصنيف ثنائي:

from keras.layers import Embedding
from keras.datasets import imdb
from keras import preprocessing
max_features = 10000
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
model = Sequential()
model.add(Embedding(10000, 8, input_length=maxlen))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['BinaryAccuracy'])
model.summary()
history = model.fit(x_train, y_train,
epochs=10,
batch_size=32,
validation_split=0.2)

 

 

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

  • 1

الدالة BinaryAccuracy  هي احدى الطرق التى يمكن حساب دقة النموذج  Accuracy. وتعتمد على قياس نسبة المرات الصحيحة التي استطاع النموذج ان يتنبأها بدلالة العلامات labels الصحيحة للداتا.

على سبيل المثال، لو أن العلامات الصحيحة هي [1, 1, 0, 0]،  وما تنبأ به النموذج هو  [0.98, 1, 0, 0.6]، لذلك فإن نسبة التوقع هي 75%، ولو أن الاوزان كانت [1, 0, 0, 1]، حينها فإن binary accuracy ستكون 50%

هذا المقياس يقوم بتكوين متغيرين وهما total و count، تستخدم  total في ايجاد عدد العلامات labels في الداتا كلها ، اماcount تستخدم لحساب عدد المرات التي تكون القيم المتوقعة فيها هي القيم الصحيحة، ويتم ارجاع المعدل عن طريق قسمة count على total في شكل معيار احادي  binary accuracy.

اما عن استخدامها في keras فهي كالتالي:

tf.keras.metrics.BinaryAccuracy(
    name="binary_accuracy", dtype=None, threshold=0.5
)

حيث:

name: هو اسم المعيار وهو اختياري

dtype: وهو نوع البيانات في الخرج وهو ايضا اختياري.

threshold: هو القيمة التي تفصل بين حساب اذا كان التوقع صحيح أم خطأ، وتمون قيمته من 0 ل 1، هذه القيمة يتم حسابها بطرقة تطبيقة عن طريق تجربة عدة ارقام واختيار الافضل.

وفي استخدامها لتدريب النموذج، تستخدم ف اخر طبقة كالتالي:

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['BinaryAccuracy'])

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...