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

السؤال

نشر (معدل)

أقوم بتدريب شبكة 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)

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...