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

دالة التكلفة logcosh واستخدامها في Keras

Meezo ML

السؤال

Recommended Posts

  • 1

Log-cosh هي دالة أخرى من دوال التكلفة المستخدمة مع مهام التوقع  وهي أكثر سلاسة من MSE، وهي لوغاريتم جيب التمام الزائدي لخطأ التنبؤ "hyperbolic cosine of the prediction error".
log(cosh(x)) تساوي تقريباً:

(x ** 2) / 2 #صغيرة x عندما تكون
abs(x) - log(2) # عندما تكون كبيرة

هذا يعني أنها تعمل في الغالب مثل MSE، ولكنها لا تتأثر بالتنبؤ غير الصحيح إلى حد كبير. ولديها كل مزايا دالة هوبر، إضافة إلى إمكانية تفاضلها مرتين، على عكس دالة هوبر. وهذا مهم مع العديد من الخوارزميات التحسين مثل Newton’s.
في كيراس يمكن استخدامها من الموديول:

keras.losses

الصيغة الرياضية:

# logcosh = log((exp(x) + exp(-x))/2); x= y_pred - y_true

مثال:

import keras
y_true = [[0., 1.], [0., 0.]]
y_pred = [[1., 1.], [0., 0.]]
l = keras.losses.LogCosh()
l(y_true, y_pred).numpy() # 0.1084452

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

model.compile(
	loss='LogCosh'
	...
)
# أو 
model.compile(
	loss=keras.losses.LogCosh()
	...
)

مثال عملي:

# تحميل الداتا
from keras.datasets import boston_housing
import keras
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
# توحيد البيانات
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std
test_data -= mean
test_data /= std
from keras import models
from keras import layers
# بناء النموذج
def build_model():
    model = models.Sequential()
    model.add(layers.Dense(64, activation='relu',
    input_shape=(train_data.shape[1],)))
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(1))
    model.compile(optimizer='rmsprop', loss='LogCosh', metrics=['mae'])
    return model
# تدريب النموذج
model = build_model()
model.fit(train_data, train_targets,epochs=8, batch_size=64)
-----------------------------------------------------------------------Epoch 1/8
7/7 [==============================] - 1s 5ms/step - loss: 21.0908 - mae: 21.7840
Epoch 2/8
7/7 [==============================] - 0s 6ms/step - loss: 20.3744 - mae: 21.0669
Epoch 3/8
7/7 [==============================] - 0s 4ms/step - loss: 18.8925 - mae: 19.5840
Epoch 4/8
7/7 [==============================] - 0s 2ms/step - loss: 17.1608 - mae: 17.8454
Epoch 5/8
7/7 [==============================] - 0s 3ms/step - loss: 16.1519 - mae: 16.8398
Epoch 6/8
7/7 [==============================] - 0s 3ms/step - loss: 14.0706 - mae: 14.7509
Epoch 7/8
7/7 [==============================] - 0s 3ms/step - loss: 13.2366 - mae: 13.9173
Epoch 8/8
7/7 [==============================] - 0s 3ms/step - loss: 11.4787 - mae: 12.1537

 

تم التعديل في بواسطة Ali Haidar Ahmad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

Logcosh: هي إحدى دوال حساب الخطأ في keras والتي تستخدم لوغريثم جيب التمام في حساب الفرق بين القيم الحقيقية و المتوقعة من النموذج.

اقتباس

Logcosh: Logarithm of the hyperbolic cosine of the prediction error

تكون على صيغة:

tf.keras.losses.log_cosh(y_true, y_pred)

حيث ان tf ترمز ل tensorflow و y_true للقيم الحقيقية، y_pred للقيم المتوقعة من النموذج.

مثال:

from tensorflow import keras
 
yActual = [4, -1.5, 5, 2]
yPredicted = [3.5, 1, 5, 3]
 
logcoshObject = keras.losses.LogCosh()
logcoshTensor = logcoshObject(yActual, yPredicted)
logcosh = logcoshTensor.numpy()
 
print(logcosh)

والناتج عبارة عن 0.59186584 وهي حاصل (x ** 2) / 2 لأن القيم صغيرة و يتم حسابه ك abs(x) - log(2) في حال كانت القيم كبيرة، ذلك يعنى انه مثل mean_squared_error و لكنه أقل تأثر بالقيم المتوقعة بصورة خاطئة.

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...