• 0

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

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

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)

 

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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'))

 

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


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

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

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

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


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

تسجيل الدخول

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


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