Chollet ML نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 قمت ببناء نموذج تصنيف متعدد لمجموعة بيانات MINST لكن يظهر لي هذا الخطأ، فما هي المشكلة: from keras import layers from keras import models model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10, activation='softmax')) from keras.datasets import mnist import keras from tensorflow.keras.utils import to_categorical (train_images, train_labels), (test_images, test_labels) = mnist.load_data() train_images = train_images.reshape((60000, 28, 28, 1)) train_images = train_images.astype('float32') / 255 test_images = test_images.reshape((10000, 28, 28, 1)) test_images = test_images.astype('float32') / 255 train_labels = to_categorical(train_labels) test_labels = to_categorical(test_labels) model.compile(optimizer='rmsprop', loss=keras.metrics.CategoricalCrossentropy(), metrics=["acc"]) model.fit(train_images, train_labels, epochs=5, batch_size=64) test_loss, test_acc = model.evaluate(test_images, test_labels) اقتباس
1 Ali Haidar Ahmad نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 الخطأ هنا من المكان الذي تستورد فيه دالة التكلفة CategoricalCrossentropy، فهذه الدالة يمكن استخدامها كدالة تكلفة وكمعيار لقياس الدقة. ففي حالة كنت تريد استخدامها كدالة تكلفة يجب عليك استيرادها من الموديول losses أما إذا أردت استخدامها كمعيار فعيلك استيرادها من الموديول metrices أي يصبح نموذجك كالتالي: from keras import layers from keras import models model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10, activation='softmax')) from keras.datasets import mnist import keras from tensorflow.keras.utils import to_categorical (train_images, train_labels), (test_images, test_labels) = mnist.load_data() train_images = train_images.reshape((60000, 28, 28, 1)) train_images = train_images.astype('float32') / 255 test_images = test_images.reshape((10000, 28, 28, 1)) test_images = test_images.astype('float32') / 255 train_labels = to_categorical(train_labels) test_labels = to_categorical(test_labels) model.compile(optimizer='rmsprop', loss=keras.losses.CategoricalCrossentropy(), metrics=["acc"]) model.fit(train_images, train_labels, epochs=5, batch_size=64) test_loss, test_acc = model.evaluate(test_images, test_labels) # 99% حيث أنه أعطاك خطأ يعبر عن عدم قدرته على حساب المشتقات وذلك لأنه لم يتعرف على دالة التكلفة التي قمت بتمريرها. اقتباس
1 Ahmed Sharshar نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 ValueError: No gradients provided for any variable تعني أنك لم تقم باستدعاء أي دالة تكلفة loss function لتقييم النواتج، ورغم استدعاءك ل CategoricalCrossentropy الا انك لم تستدعها لتكون دالة تكلفة وانما لقياس الدقة، وهنا ظهر الخطأ، قد يكون قد حصل لديك لبس نتيجة امكانية استخدام CategoricalCrossentropy كدالة للدقة أو كدالة تكلفة. كل ما عليك فعله هو اعادة استخدامها لتصبح دالة تكلفة، أو استخدام أي دالة تكلفة أخرى تريد، كالتالي: from keras import layers from keras import models model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10, activation='softmax')) from keras.datasets import mnist import keras from tensorflow.keras.utils import to_categorical (train_images, train_labels), (test_images, test_labels) = mnist.load_data() train_images = train_images.reshape((60000, 28, 28, 1)) train_images = train_images.astype('float32') / 255 test_images = test_images.reshape((10000, 28, 28, 1)) test_images = test_images.astype('float32') / 255 train_labels = to_categorical(train_labels) test_labels = to_categorical(test_labels) model.compile(optimizer='rmsprop', loss=keras.losses.CategoricalCrossentropy(),#هنا #أو يمكنك استبدالها بأي دالة تكلفة أخري كالتالي: # loss=keras.losses.SparseCategoricalCrossentropy() metrics=["acc"]) model.fit(train_images, train_labels, epochs=5, batch_size=64) test_loss, test_acc = model.evaluate(test_images, test_labels) # 99% اقتباس
السؤال
Chollet ML
قمت ببناء نموذج تصنيف متعدد لمجموعة بيانات MINST لكن يظهر لي هذا الخطأ، فما هي المشكلة:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.