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

السؤال

Recommended Posts

  • 1
نشر

نعم يمكننا ذلك، ففي كيراس تم تعريف ال CosineSimilarity كدالة تكلفة لمهام التوقع.
المعادلة الرياضية:

loss = -sum(l2_norm(y_true) * l2_norm(y_pred))

يكون الخرج بين ال 1 و -1، بحيث كلما اقتربت القيم من ال -1 يكون التشابه أعظم وكلما اقترب من 1 يكون أقل تشابه وتشير ال 0 إلى حالة التعامد. وهذا مايجعلها قابلة للاستخدام كدالة  تكلفة.
يمكن استيرادها من الموديول:

keras.losses

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

# تحميل الداتا
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=keras.losses.CosineSimilarity(axis=1), metrics=['mae'])
    #model.compile(optimizer='rmsprop', loss='CosineSimilarity', metrics=['mae'])
    return model
# تدريب النموذج
model = build_model()
model.fit(train_data, train_targets,epochs=8, batch_size=64)

 

  • 0
نشر

يمكن إستخدامه لمعرفة التشابه و الإختلاف بين مجموعتين، و ذلك يتم عن طريق حساب ناتج الضرب النقطي للمجموعتين، راجع المثال:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

x = np.random.rand(1000,1000)
y = np.random.rand(1000,1000)

cosine_similarity(x, y)

وناتج الدالة cosine_similarity في هذه الحالة عبارة عن مصفوفة ابعادها 1000*1000 لحاصل تشابه القيم في كل من x,y.

يمكننا تنفيذ إستخدام CosineSimilarity في نموذج بيانات boston dataset والتي تعتبر من البيانات المستخدمة في عملية regression لتحديد سعر المنزل بإستخدام عدد من الخصائص.

from keras import models, layers
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
X, y = load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.4)
print(X_train.shape, y_train.shape,X_test.shape, y_test.shape)
model = models.Sequential()
model.add(layers.Dense(13, activation='linear', input_shape=(13,)))
model.add(layers.Dense(26, activation='sigmoid'))
model.add(layers.Dense(1, activation='tanh'))
model.compile(optimizer='rmsprop',loss=tf.keras.losses.CosineSimilarity(axis=1),metrics=['mse'])
model.fit(X_train, y_train, epochs=3, batch_size=200)

في هذه الحالة قمنا بإستخدام tf.keras.losses.CosineSimilarity و التي تعمل على مستوى الخصائص و ذلك عبر تحديد axis=1.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...