Chollet ML نشر 13 أغسطس 2021 أرسل تقرير نشر 13 أغسطس 2021 (معدل) قمت ببناء النموذج التالي، لكن لم أفهم سبب الخطأ؟ حيث بعد أن دربته قمت بحفظه ثم قمت بإعادة تحميله و تنفيذ compile له. علماً أنني أتعامل مع مجموعة بيانات MINST الشهيرة. K.set_image_dim_ordering('th') numpy.random.seed(7) from keras.datasets import mnist # تحميل البيانات (X_train, y_train), (X_test, y_test) = mnist.load_data() # تحضير البيانات X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) X_train=X_train.astype('float32')/ 255.0 X_test=X_test.astype('float32')/ 255.0 #label ترميز ال y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) model = Sequential() model.add(Convolution2D(32, 3, 3, input_shape=(1, 28, 28), activation='tanh')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(16, 3, 3, activation='tanh')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.4)) model.add(Flatten()) model.add(Dense(100, activation='tanh')) model.add(Dense(y_test.shape[1], activation='softmax')) # تجميع المعلومات model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['acc']) # بناء النموذج model = larger_model() # تدريبه model.fit(X_train, y_train, epochs=12, batch_size=128,validation_data=(X_test, y_test)) # تقييم النموذج scores = model.evaluate(X_test, y_test) print("Baseline Error: %.2f%%" % (100-scores[1]*100)) # حفظه model_json = model.to_json() with open('mnist_model.json', 'w') as f: f.write(model_json) model.save_weights("mnist_weights.h5") # تحميله with open('mnist_model.json') as f: model_json = f.read() model = model_from_json(model_json) model.load_weights('mnist_weights.h5') # تجميع المعلومات model.compile(loss='sparse_categorical_crossentropy', optimizer='rmsprop', metrics=['acc']) scores = model.evaluate(X_test, y_test) print("Baseline Error: %.2f%%" % (100-scores[1]*100)) تم التعديل في 13 أغسطس 2021 بواسطة Chollet ML اقتباس
1 Ali Haidar Ahmad نشر 13 أغسطس 2021 أرسل تقرير نشر 13 أغسطس 2021 الخطأ في استخدامك ل sparse_categorical_crossentropy في تجميع النموذج بعد أن قمت بتحميله. إن نموذجك الأساسي يستخدم categorical_crossentropy الذي يتعامل مع أهداف "target" مرمزة بترميز One-Hot. وهذا ماتم من خلال التابع np.utils.to_categorical بينما sparse_categorical_crossentropy تتوقع منك أن يكون ترميز الأهداف بالترميز الصحيح Integer Encoding ولهذا السبب يحتج كيراس لاستخدامك sparse_categorical_crossentropy. حيث يتوقع أبعاد (1, ؟) لل y_test، بينما أنت تقدم له أبعاد (10, ؟) لذا يجب أن تستخدم هنا categorical_crossentropy: model.compile( ..., loss='categorical_crossentropy' ) أو: y_test = np.argmax(y_test) وهناك مسألة مشابهة لها تجدها في هذا الرابط:https://academy.hsoub.com/questions/16732-ظهور-الخطأ invalidargumenterror- logits-and-labels-must-have-the-same-first-dimension-في-كيراس-keras/ اقتباس
1 Ahmed Sharshar نشر 13 أغسطس 2021 أرسل تقرير نشر 13 أغسطس 2021 المشكلة تكمن في شكل ترميز البيانات وعدم استخدامك لدالة loss مناسبة لحسابها، وهذا الاختلاف ما بين sparse_categorical_crossentropy و categorical_crossentropy حيث ان categorical_crossentropy تتوقع ان الترميز بين 0 و 1، وهو الشكل الذي قمت بالترميز اليه سابقا. لذلك كل ما عليك هو تعديل loss='sparse_categorical_crossentropy' لتصبح: loss='categorical_crossentropy' ويكون الكود السليم كالتالي: K.set_image_dim_ordering('th') numpy.random.seed(7) from keras.datasets import mnist # تحميل البيانات (X_train, y_train), (X_test, y_test) = mnist.load_data() # تحضير البيانات X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) X_train=X_train.astype('float32')/ 255.0 X_test=X_test.astype('float32')/ 255.0 #label ترميز ال y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) model = Sequential() model.add(Convolution2D(32, 3, 3, input_shape=(1, 28, 28), activation='tanh')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Convolution2D(16, 3, 3, activation='tanh')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.4)) model.add(Flatten()) model.add(Dense(100, activation='tanh')) model.add(Dense(y_test.shape[1], activation='softmax')) # تجميع المعلومات model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['acc']) # بناء النموذج model = larger_model() # تدريبه model.fit(X_train, y_train, epochs=12, batch_size=128,validation_data=(X_test, y_test)) # تقييم النموذج scores = model.evaluate(X_test, y_test) print("Baseline Error: %.2f%%" % (100-scores[1]*100)) # حفظه model_json = model.to_json() with open('mnist_model.json', 'w') as f: f.write(model_json) model.save_weights("mnist_weights.h5") # تحميله with open('mnist_model.json') as f: model_json = f.read() model = model_from_json(model_json) model.load_weights('mnist_weights.h5') # تجميع المعلومات model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['acc']) scores = model.evaluate(X_test, y_test) print("Baseline Error: %.2f%%" % (100-scores[1]*100)) اقتباس
السؤال
Chollet ML
قمت ببناء النموذج التالي، لكن لم أفهم سبب الخطأ؟ حيث بعد أن دربته قمت بحفظه ثم قمت بإعادة تحميله و تنفيذ compile له. علماً أنني أتعامل مع مجموعة بيانات MINST الشهيرة.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.