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

ظهور الخطأ ValueError: Input 0 of layer sequential_1 is incompatible with the layer أثناء تدريب شبكة CNN في keras

Meezo ML

السؤال

أقوم بتدريب شبكة CNN بسيطة على مجموعة minst في كيراس ولكن لا أعرف لماذا يظهر هذا الخطأ:

import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense , Activation, Dropout
from keras.optimizers import Adam ,RMSprop
from keras.models import Sequential
from keras.utils.np_utils import to_categorical
from keras.datasets import mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
model = keras.models.Sequential([
    keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28,28,1)),
    keras.layers.MaxPool2D(2,2),
    keras.layers.Conv2D(64, (3,3), activation='relu'),
    keras.layers.MaxPool2D(2,2),
    keras.layers.Flatten(),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=20,validation_data=(x_test, y_test), batch_size=60)
# الخطأ
Epoch 1/20
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

<ipython-input-4-30f7b9447993> in <module>()
     22 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
     23 
---> 24 model.fit(x_train, y_train, epochs=20,validation_data=[x_test, y_test], batch_size=60)
     25 

9 frames

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    984           except Exception as e:  # pylint:disable=broad-except
    985             if hasattr(e, "ag_error_metadata"):
--> 986               raise e.ag_error_metadata.to_exception(e)
    987             else:
    988               raise

ValueError: in user code:

    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:830 train_function  *
        return step_function(self, iterator)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:813 run_step  *
        outputs = model.train_step(data)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:770 train_step  *
        y_pred = self(x, training=True)
    /usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py:989 call  *
        input_spec.assert_input_compatibility(self.input_spec, inputs, self.name)
    /usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py:227 assert_input_compatibility  *
        raise ValueError('Input ' + str(input_index) + ' of layer ' +

    ValueError: Input 0 of layer sequential_1 is incompatible with the layer: : expected min_ndim=4, found ndim=3. Full shape received: (60, 28, 28)

 

تم التعديل في بواسطة Meezo ML
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

وفي حال لم تكن تعرف عدد العينات في كل من المصفوفات المراد تحويل شكلها يمكنك القيام بالتالي:

x_train = np.reshape(x_train, (-1, 28, 28, 1))
x_test = np.reshape(x_test, (-1, 28, 28, 1))

والان لاحظ أن البرنامج لن ينفذ و ينتج الخطأ التالي:

ValueError: Shapes (60, 1) and (60, 10) are incompatible

لتفادي ذلك يجب تحويل مصفوفات y_train, y_test إلى التمثيل المقابل لها في الone hot encoding بإستخدام دالة to_categorical لأن عملية التصنيف إلى 10 أصناف تتتطلب ذلك لاحظ keras.layers.Dense(10):

y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

والان البرنامج يصبح كالتالي:

import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense , Activation, Dropout
from keras.optimizers import Adam ,RMSprop
from keras.models import Sequential
from keras.utils.np_utils import to_categorical
from keras.datasets import mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
print(x_train.shape, y_train.shape,x_test.shape, y_test.shape)
x_train = np.reshape(x_train, (-1, 28, 28, 1))
x_test = np.reshape(x_test, (-1, 28, 28, 1))
print(x_train.shape, y_train.shape,x_test.shape, y_test.shape)
# y تطبيق على قيم one hot encoding
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
print(x_train.shape, y_train.shape,x_test.shape, y_test.shape)
model = keras.models.Sequential([
    keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28,28,1)),
    keras.layers.MaxPool2D(2,2),
    keras.layers.Conv2D(64, (3,3), activation='relu'),
    keras.layers.MaxPool2D(2,2),
    keras.layers.Flatten(),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=20,validation_data=(x_test, y_test), batch_size=60)

 

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

  • 1

بما أنك تتعامل مع شبكة عصبونية التفافية CNN يجب أن تكون الصورة من الشكل:
الطول*العرض*عدد القنوات.
أي يجب تحويل الأبعاد الخاصة بالداتا كالآتي:

x_train = x_train.reshape(60000, 28, 28, 1)
x_test = x_test.reshape(10000, 28, 28, 1)

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...