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

ما الفرق بين model.predict و model.evaluate في كيراس Keras و تنسرفلو Tensorflow

عامر ابراهيم

السؤال

Recommended Posts

  • 1

الدالة evaluate تقوم بتوقع (predict) قيم على أساس دخل (input) يمرر لها وتقوم بحساب الدقة و التكلفة (loss) على أساس المعطيات (دالة التكلفة ومعيار الكفاءة metric) الممررة للدالة compile أي نقوم لتمريرالقيم الحقيقية والمتوقعة ويحسب لك الدقة والتكلفة. ولمزيد من التفاصيل يمكنك الانتقال إلى السؤال التالي:

أما بالنسبة للدالة predict فهي تقوم فقط بتوقع القيم على أساس الدخل الممرر لها، وذلك مفيد بالطبع لأنك قد تحتاج هذا القيم، مثلاً تريد استخدام معيار آخر غير معرَف ضمن إطار العمل مثل F1-Score أو تريد التعبير عن النتائج كقيم احتمالية.. إلخ. مثال:

from sklearn.datasets import make_blobs
from sklearn.preprocessing import MinMaxScaler as mimx
from keras.models import Sequential
from keras.layers import Dense
# توليد بيانات تصنيف ثنائية الأبعاد 
data, labels = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# تقييس البيانات
s = mimx()
s.fit(data)
data = scalar.transform(data)
# توليد بيانات أخرى للاختبار
test, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)
test = s.transform(test)
# تعريف النموذج
model = Sequential()
model.add(Dense(8, input_dim=2, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop')
model.fit(data, labels, epochs=461)
# prediction
prdictedValues = model.predict_classes(test)
# عرض القيم المتوقعة لعينات البيانات
for i in range(len(Xnew)):
	print("X=%s, Predicted=%s" % (test[i], prdictedValues[i]))
"""
X=[0.87935790 0.1206421], Predicted=[0]
X=[0.22155783 0.7724488], Predicted=[1]
X=[0.70015480 0.96791697], Predicted=[0]
"""

 

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

  • 1

ببساطة فإن model.evaluate تقوم بتوقع الخرج للبيانات التي تدخل للنموذج ومن ثم تقوم بحساب الدالة التي تحسب الدقة بأي طريقة كانت والتي نقوم بتحديدها في model.compile وهذا بناء على y_true و y_pred ثم يقوم بارجاع قيمة حساب دالة الدقة كمقياس.

أما model.predict فانها فقط تقوم بارجاع y_pred.

لذلك اذا استخدمت model.predict ثم قمت بحساب الدقة بنفسك على النتائج التي ترجع من تلك الدالة فانه من المفترض انتظهر لك نفس الارقام تماما اذا استخدمت model.evaluate مباشرة.

المثال التالي يوضح كيف تستخدم model.predict:

pred = model.predict(x_test) 
pred = np.argmax(pred, axis = 1)[:5] 
label = np.argmax(y_test,axis = 1)[:5] 

print(pred) 

>>> [7 2 1 0 4] 

print(label)

>>>[7 2 1 0 2]

لاحظ أنه قام بارجاع ما تم توقعه بناء على التعلم الذي حصل عليه النموذج، اذا قمت بمقارنه ما توقعه البرنامج بالترميز الصحيح لها ينتج لك دقة 80% (حيث انه قام بتوقع 4 صواب من أصل 5) وهو تماما ما تقوم بارجاعه لك دالة  model.evaluate

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...