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

السؤال

نشر

قمت ببناء النموذج التالي، لكن عندما أحاول أن أقوم بتدريبه يظهر لي الخطأ التالي:

from keras.datasets import reuters
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(
num_words=100)
# تررميز البيانات
import numpy as np
def vectorize_sequences(sequences, dimension=100):
  results = np.zeros((len(sequences), dimension))
  for i, sequence in enumerate(sequences):
   results[i, sequence] = 1.
  return results
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
from keras.utils.np_utils import to_categorical
one_hot_train_labels = to_categorical(train_labels)
one_hot_test_labels = to_categorical(test_labels)
# بناء النموذج
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(100,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(46, activation='softmax'))
# التجميع
model.compile(optimizer='rmsprop',
loss='SparseCategoricalCrossentropy',
metrics=['CategoricalAccuracy'])
# التدريب
history = model.fit(x_train,
one_hot_train_labels,
epochs=10,
batch_size=512)
model.save("model.h5")
---------------------------------------------------------------------------
InvalidArgumentError:  logits and labels must have the same first dimension, got logits shape [512,46] and labels shape [23552]
	 [[node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits (defined at <ipython-input-10-de26530fc6fc>:31) ]] [Op:__inference_train_function_3812]

Function call stack:
train_function

 

Recommended Posts

  • 1
نشر (معدل)

عندما يكون ترميز ال label هو ترميز One-Hot نستخدم CategoricalCrossentropy أو اختصاراً CCE.  أما عندما يكون ترميز ال label هو الترميز الصحيح Integer Encoding (في نموذجك لديك 46 فئة وبالتالي كل فئة يتم ربطها بعدد صحيح يمثلها أي 1,2,3,4...etc) نستخدم SparseCategoricalCrossentropy أو اختصاراً SCCE. وعند محاولة تطبيقهم بالعكس (أي استخدام SCCE مع بيانات مرمزة بال One-Hot)يظهر لنا هذا الخطأ. وبشكل عام الدالتين يتبعان لنفس الفكرة والنهج (الانتروبيا المتقطعة) أي كلاهما متطابقان لكن الفرق في طريقة تطبيقهما فالأولى تتعامل مع بيانات بترميز معين والأخرى بترميز آخر (لكن SCCE أفضل من ناحية الكفاءة باستخدام الذاكرة+السرعة). لذا يجب عليك القيام بإحدى الأمرين التاليين: إما أن تستبدل scce ب cce :

mymodel.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['CategoricalAccuracy'])

أو إذا كنت مصراً على scce  يمكنك أن تلغي عملية الترميز One-Hot أي يصبح النموذج:

from keras.datasets import reuters
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(
num_words=100)
# تررميز البيانات
import numpy as np
def vectorize_sequences(sequences, dimension=100):
  results = np.zeros((len(sequences), dimension))
  for i, sequence in enumerate(sequences):
   results[i, sequence] = 1.
  return results
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
# بناء النموذج
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(100,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(46, activation='softmax'))
# التجميع
model.compile(optimizer='rmsprop',
loss='SparseCategoricalCrossentropy',
metrics=['acc'])
# التدريب
history = model.fit(x_train,
one_hot_train_labels,
epochs=10,
batch_size=512)
model.save("model.h5")

يمكنك أيضاً أن تقوم بعكس الترميز (عكس ترميز ال One-Hot أي أن تعيده لشكله الأصلي وهو الترميز بأعداد صحيحية) وبالتالي يصبح بإمكانك أن تستخدام دالة التكلفة scce معه ويمكنك استخدام الدالة np.argmax للقيام بذلك. وفي الروابط التالية توضيح لدالتي التكلفة:

 

تم التعديل في بواسطة Ali Haidar Ahmad

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...