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

ظهور الخطأ التالي ValueError: Failed to find data adapter that can handle input: <class 'numpy.ndarray'>, (<class 'list'> containing values of types {"<class 'numpy.float64'>"}) أثناء محاولة تدريب نموذج في Keras

السؤال

نشر

ظهر لدي الخطأ التالي أثناء محاولة تدريب نموذج RNN مالسبب:

File "C:\python36-64\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 734, in fit
    use_multiprocessing=use_multiprocessing)

File "C:\python36-64\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 224, in fit
    distribution_strategy=strategy)

File "C:\python36-64\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 497, in _process_training_inputs
    adapter_cls = data_adapter.select_data_adapter(x, y)

File "C:\python36-64\lib\site-packages\tensorflow_core\python\keras\engine\data_adapter.py", line 628, in select_data_adapter
    _type_name(x), _type_name(y)))

ValueError: Failed to find data adapter that can handle input: <class 'numpy.ndarray'>, (<class 'list'> containing values of types {"<class 'numpy.float64'>"})

 

Recommended Posts

  • 2
نشر (معدل)

يظهر هذا الخطأ لأن بياناتك غير متجانسة حيث أنك تخلط المصفوفات numpy مع القوائم. يجب أن تكون كل بيانات التدريب والاختبار مصفوفات "numpy arrays". انظر للمثال التالي:

# هنا بياناتي متجانسة
from keras.datasets import imdb
from keras.preprocessing import sequence
max_features = 10000
maxlen = 20
# تحميل البيانات
# هنا تم تحميل البيانات على شكل قوائم
print('Loading data...')
(input_train, y_train), (input_test, y_test) = imdb.load_data(num_words=max_features)
print(len(input_train), 'train sequences')
print(len(input_test), 'test sequences')
print('Pad sequences (samples x time)')
#to_numpy إذا لم تكن بياناتك مصفوفات قم بتحويلها إلى مصفوفات نمباي باستخدام التابع
# معالجة البيانات
# هنا ستتحول البيانات تلقائياً إلى مصفوفات نمباي لأن تابع الحشو يردها على شكل مصفوفة
input_train = sequence.pad_sequences(input_train, maxlen=maxlen) # حشو
input_test = sequence.pad_sequences(input_test, maxlen=maxlen) # حشو
print('input_train shape:', input_train.shape)
print('input_test shape:', input_test.shape)
# بناء النموذج
from keras.layers import Dense,Embedding,LSTM
import keras
model = keras.Sequential()
model.add(Embedding(max_features, 64))
model.add(LSTM(64))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
# أما بياناتك فهي خليط من المصفوفات والقوائم وهذا ينتج خطأ

 

تم التعديل في بواسطة Ali Haidar Ahmad
  • 1
نشر

قد تكون المشكلة في التعامل مع البيانات بنوع قوائم وليس مصفوفات وهي النوع التي تستقبل من قبل النموذج عند نداء الدالة fit، يمكنك تحويل بيانات التدريب و التحقق إلى مصفوفات بالطريقة التالية:

import tensorflow.keras as keras
train_x = np.asarray(train_x)
train_y = np.asarray(train_y)

validation_x = np.asarray(validation_x)
validation_y = np.asarray(validation_y)

أو قد يكون هذا الخطأ ناتج من التعامل مع المكتبات القديمة والتي تحتاج إلى ترفيع upgrade، مثلاً بدلاً من مناداة keras بالصورة:

import keras 

والتي تتعامل مع keras الإصدار الأول له، يمكنك مناداة:

import tensorflow.keras as keras

والتي تتعامل مع الإصدار الثاني لكيراس. نفس الطريقة تنطبق على الدوال المستخدمة مثل sequence.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...