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

ظهور الخطأ ValueError: Error when checking model input في كيراس Keras

Chollet ML

السؤال

قمت ببناء النموذج التالي في كيراس، لكن يطهر لي الخطأ التالي:

backend.set_image_dim_ordering('tf')
np.random.seed(7)
x_train = x_train.astype('float32')/255.0
x_test = x_test.astype('float32')/255.0
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
model = Sequential()
model.add(Convolution2D(16, 3, 3,, W_constraint=maxnorm(3),
                            input_shape=(3, 32, 32), border_mode='same',
                            activation='tanh'))
model.add(Dropout(0.3))
model.add(Convolution2D(32, 3, 3,, W_constraint=maxnorm(3),
                            activation='tanh', border_mode='same'))
model.add(Flatten())
model.add(Dense(400, activation='relu', W_constraint=maxnorm(3)))
model.add(Dropout(0.4))
model.add(Dense(y_test.shape[1], activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['acc'])
model.fit(x_train, y_train,batch_size=64, validation_data=(x_test, y_test), nb_epoch=30)
model.evaluate(x_test, y_test)
------------------------------------------------------------
ValueError: Error when checking model input: expected convolution2d_input_1 to have shape (None, 3, 32, 32) but got array with shape (50000, 32, 32, 3)

 

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

Recommended Posts

  • 1

يخبرك الخطأ بأن أبعاد بيانات التدريب لديك (الدخل) هي (50000, 32, 32, 3) بينما أنت قمت بتعريف النموذج على أن تستقبل طبقة الدخل الخاصة به input_shape أبعاد من الشكل (3, 32, 32)  أي input_shape=(3, 32, 32) وبالتالي ظهر الخطأ نتيجة عدم توافق الأبعاد. أي أن شكل الإدخال المتوقع والبيانات المعطاة مختلفين. ولحل المشكلة يجب أن تقوم بتعديل أبعاد طبقة الدخل في نموذجك أي input_shape=(32, 32, 3) أو أن تقوم بتغيير أبعاد الدخل يحيث يتوافق مع طبقة الدخل في نموذجك:

x_train = x_train.transpose(0,3,1,2)
x_test = x_test.transpose(0,3,1,2)

 

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

  • 1

تكمن المشكلة في تحديدة لشكل البيانات المدخل بطريقة خاطئة هنا:

model.add(Convolution2D(16, 3, 3,, W_constraint=maxnorm(3),
                            input_shape=(3, 32, 32), border_mode='same',
                            activation='tanh'))

input_shape يمثل شكل البيانات التي تدخل الي اول طبقة في طبقات التعلم، أنت هنا قمت بتحديدها على انها (3,32,32) في حين أن شكل البيانات لديك هو (50000, 32, 32, 3)، لذا عليك ظبط شكل الدخل ليمثال شكل البيانات لديك كالتالي:

model.add(Convolution2D(16, 3, 3,, W_constraint=maxnorm(3),
                            input_shape=(50000, 32, 32, 3), border_mode='same',
                            activation='tanh'))

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...