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

السؤال

نشر

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

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...