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

السؤال

نشر

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

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.

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

Recommended Posts

  • 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 لكنك نسيت أن تقوم باقتطاع بيانات الهدف أيضاً.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...