• 0

ظهور الخطأ ValueError: Data cardinality is ambiguous في كيراس Keras

قمت ببناء نموذج لتصنيف الأخبار على بيانات راوترز، لكن يظهر لي الخطأ التالي عند محاولة تدريب نموذجي؟

from keras.datasets import reuters
import keras
import tensorflow as tf
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(
num_words=10000)
import numpy as np
def vectorize_sequences(sequences, dimension=10000):
  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)
x_val = x_train[:1000]
partial_x_train = x_train[1000:]

from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(10000,)))
model.add(keras.layers.LayerNormalization())
model.add(layers.Dense(64, activation='relu'))
model.add(keras.layers.LayerNormalization())
model.add(layers.Dense(46, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['CategoricalAccuracy'])
#fit تدريب النموذج من خلال الدالة 
history = model.fit(tf.convert_to_tensor(partial_x_train, np.float32),
one_hot_train_labels,
epochs=6,
batch_size=512,
validation_data=(x_val, one_hot_test_labels),max_queue_size=10)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-b9508248cdf2> in <module>()
     34 epochs=6,
     35 batch_size=512,
---> 36 validation_data=(x_val, one_hot_test_labels),max_queue_size=10)
4 frames
/usr/local/lib/python3.7/dist-packages/keras/engine/data_adapter.py in _check_data_cardinality(data)
   1647           label, ", ".join(str(i.shape[0]) for i in tf.nest.flatten(single_data)))
   1648     msg += "Make sure all arrays contain the same number of samples."
-> 1649     raise ValueError(msg)
   1650 
   1651 
ValueError: Data cardinality is ambiguous:
  x sizes: 7982
  y sizes: 8982
Make sure all arrays contain the same number of samples.

ما المشكلة وما السبب؟ وما هو الحل؟

انشر على الشّبكات الاجتماعية


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

يظهر هذا الخطأ عندما تكون بيانات التدريب والاختبار غير متوافقة، أقصد بذلك عندما تكون الأبعاد غير متوافقة، أي بمعنى أوضح إذا كانت::

# في حالة كانت بياناتك هي بيانات تصنيف ثنائي
# x أبعاد الدخل 
shape : (samples,features)
#سمها كما شئت y أو  label أو ال  target فيجب أن تكون أبعاد بيانات الهدف 
Shape: (samples,)
# أي مثلاً
X_Shape:(1000,521) --> يجب أن يكون --> y_shape:(1000,)
#label أي بمعنى آخر يجب أن يكون لكل عينة من بياناتك قيمة تمثل الهدف أو 
# في حالة كانت بياناتك بيانات تصنيف متعدد
X_Shape : (samples,features)
y_shape:  (samples,عدد الفئات)
# أي في مثالك فإن أبعاد الدخل هي
X_Shape : 7982, 10000)
# ولدينا 46 فئة وبالتالي أبعاد الهدف تكون
(7982, 46)

وهنا يخبرك كيراس أن عدد ال samples في بياناتك هو 7982 بينما ال label هو 8982 لذا يظهر خطأ. الحل:

x_val = x_train[:1000]
partial_x_train = x_train[1000:]
# هنا
y_val = one_hot_train_labels[:1000]
partial_y_train = one_hot_train_labels[1000:]
# الآن:
partial_x_train.shape
# (7982, 10000)
partial_y_train.shape
# (7982, 46)
...
...
.
.
#fit تدريب النموذج من خلال الدالة 
history = model.fit(tf.convert_to_tensor(partial_x_train, np.float32),
partial_y_train,
epochs=6,
batch_size=512,
validation_data=(x_val, y_val),max_queue_size=10)

حيث أنك قمت باقتطاع جزء من بيانات التدريب لديك لتكون بيانات validation لكنك نسيت أن تقوم باقتطاع بيانات الهدف أيضاً.

2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن