Meezo ML نشر 8 يوليو 2021 أرسل تقرير نشر 8 يوليو 2021 اعمل على تصنيف الصور minst في keras على google colab ولكن قمت ببعض التعديلات على الداتا أي فقط صنفين 0 أو 1 ولكن يظهر لي الخطأ التالي الكود: import numpy as np import pandas as pd from keras.models import Sequential from keras.layers import Dense , Activation, Dropout 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() y_train[y_train<=5]=0 y_train[y_train>5]=1 y_train=y_train.astype('int64') print(x_train.shape, y_train.shape) image_size = x_train.shape[1] input_size = image_size * image_size x_train = np.reshape(x_train, [-1, input_size]) x_train = x_train.astype('float32') / 255 x_test = np.reshape(x_test, [-1, input_size]) x_test = x_test.astype('float32') / 255 batch_size = 32 hidden_units = 256 model = Sequential() model.add(Dense(hidden_units, input_shape=(input_size,))) model.add(Activation('relu')) model.add(Dropout(0.45)) model.add(Dense(hidden_units)) model.add(Activation('relu')) model.add(Dropout(0.45)) model.add(Dense(2)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5, batch_size=batch_size) الخطأ (60000, 28, 28) (60000,) Epoch 1/5 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-22-3c7ca6e80a5b> in <module>() 32 model.add(Activation('softmax')) 33 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) ---> 34 model.fit(x_train, y_train, epochs=5, batch_size=batch_size) 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:771 train_step * loss = self.compiled_loss( /usr/local/lib/python3.7/dist-packages/keras/engine/compile_utils.py:201 __call__ * loss_value = loss_obj(y_t, y_p, sample_weight=sw) /usr/local/lib/python3.7/dist-packages/keras/losses.py:142 __call__ * losses = call_fn(y_true, y_pred) /usr/local/lib/python3.7/dist-packages/keras/losses.py:246 call * return ag_fn(y_true, y_pred, **self._fn_kwargs) /usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:206 wrapper return target(*args, **kwargs) /usr/local/lib/python3.7/dist-packages/keras/losses.py:1631 categorical_crossentropy y_true, y_pred, from_logits=from_logits) /usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:206 wrapper return target(*args, **kwargs) /usr/local/lib/python3.7/dist-packages/keras/backend.py:4827 categorical_crossentropy target.shape.assert_is_compatible_with(output.shape) /usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/tensor_shape.py:1161 assert_is_compatible_with raise ValueError("Shapes %s and %s are incompatible" % (self, other)) ValueError: Shapes (32, 1) and (32, 2) are incompatible اقتباس
1 Ali Haidar Ahmad نشر 8 يوليو 2021 أرسل تقرير نشر 8 يوليو 2021 الخطأ هو أن شكل الخرج Y في البيانات هو (,60000) يجب أن يكون شكل الخرج في البيانات مطابق لشكل الخرج في الموديل حيث شكل الخرج في الموديل الذي تقوم بتدريبه هو (32,2) وشكل المخرجات التي تظهر في خرج البيانات باعتبار انها 0 أو 1 هو (32,1) لذلك يجيب تغير الموديل لإخراج قيمة واحدة بدلاً من 2 واستخدام تابع التفعيل sigmoid مع تابع الخسارة binary_crossentropy أي يصبح الكود كالتالي: import numpy as np import pandas as pd from keras.models import Sequential from keras.layers import Dense , Activation, Dropout 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() y_train[y_train<=5]=0 y_train[y_train>5]=1 y_train=y_train.astype('int64') print(x_train.shape, y_train.shape) image_size = x_train.shape[1] input_size = image_size * image_size x_train = np.reshape(x_train, [-1, input_size]) x_train = x_train.astype('float32') / 255 x_test = np.reshape(x_test, [-1, input_size]) x_test = x_test.astype('float32') / 255 batch_size = 32 hidden_units = 256 model = Sequential() model.add(Dense(hidden_units, input_shape=(input_size,))) model.add(Activation('relu')) model.add(Dropout(0.45)) model.add(Dense(hidden_units)) model.add(Activation('relu')) model.add(Dropout(0.45)) #إصلاح model.add(Dense(1)) #إصلاح model.add(Activation('sigmoid')) #إصلاح model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5, batch_size=batch_size) 1 اقتباس
1 ريم المهدي نشر 11 يوليو 2021 أرسل تقرير نشر 11 يوليو 2021 الخطأ هو في شكل البيانات الدالخة للنموذج مع شكل النموذج نفسه، يوجد عدم تطابق ظاهر في شكل البيانات، يمكننا حل هذه المشكلة هو تطبيق نفس ما قمت بفعله في بيانات التدريب على بيانات الإختبار، و المحافظة على نفس شكل الطبقة الأخيرة في النموذج model.add(Dense(2)): import numpy as np import pandas as pd from keras.models import Sequential from keras.layers import Dense , Activation, Dropout 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) y_train[y_train<=5]=0 y_train[y_train>5]=1 #تطبيق نفس طريقة بيانات التدريب على بيانات الإختبار y_test[y_test<=5]=0 y_test[y_test>5]=1 y_train=y_train.astype('int64') print(x_train.shape, y_train.shape,x_test.shape, y_test.shape) image_size = x_train.shape[1] input_size = image_size * image_size x_train = np.reshape(x_train, [-1, input_size]) x_train = x_train.astype('float32') / 255 x_test = np.reshape(x_test, [-1, input_size]) x_test = x_test.astype('float32') / 255 print(x_train.shape, y_train.shape,x_test.shape, y_test.shape) batch_size = 32 hidden_units = 256 # 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 = Sequential() model.add(Dense(hidden_units, input_shape=(input_size,))) model.add(Activation('relu')) model.add(Dropout(0.45)) model.add(Dense(hidden_units)) model.add(Activation('relu')) model.add(Dropout(0.45)) model.add(Dense(2)) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5, batch_size=batch_size) لاحظ للتعديل كان فقط بإضافة: y_test[y_test<=5]=0 y_test[y_test>5]=1 والتي تقوم بتحويل كل صنف قيمته أقل من أو يساوي 5 إلى 0 و كل القيم غير ذلك إلى 1. ومن ثم قمنا بنداء الدالة to_categorical: y_train = to_categorical(y_train) y_test = to_categorical(y_test) والنموذج يظل كما هو يستخدم categorical_crossentropy كدالة خطأ واخر طبقة في النموذج تحتوي على 2nodes. اقتباس
السؤال
Meezo ML
اعمل على تصنيف الصور minst في keras على google colab ولكن قمت ببعض التعديلات على الداتا أي فقط صنفين 0 أو 1 ولكن يظهر لي الخطأ التالي
الكود:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.