Meezo ML نشر 28 يوليو 2021 أرسل تقرير نشر 28 يوليو 2021 (معدل) أنا أعمل على مصنف لتصنيف الأخبار على مجموعة بيانات راوترز باستخدام keras، ، لكن أتلقى الخطأ التالي: from keras.datasets import reuters (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=10000) word_index = reuters.get_word_index() reverse_word_index = dict([(value, key) for (key, value) in word_index.items()]) decoded_newswire = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]]) import numpy as np def vectorize_sequences(sequences, dimension=10000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) from keras.utils.np_utils import to_categorical one_hot_train_labels = to_categorical(train_labels) one_hot_test_labels = to_categorical(test_labels) from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(10000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(1, activation='softmax')) model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy']) x_val = x_train[:1000] partial_x_train = x_train[1000:] y_val = train_labels[:1000] partial_y_train = train_labels[1000:] history = model.fit(partial_x_train, partial_y_train, epochs=20, batch_size=512, validation_data=(x_val, y_val)) ----------------------------------------------------------------------------------------- InvalidArgumentError Traceback (most recent call last) <ipython-input-23-2238d01185a1> in <module>() 3 epochs=20, 4 batch_size=512, ----> 5 validation_data=(x_val, y_val)) 6 frames /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 58 ctx.ensure_initialized() 59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, ---> 60 inputs, attrs, num_outputs) 61 except core._NotOkStatusException as e: 62 if name is not None: InvalidArgumentError: Received a label value of 43 which is outside the valid range of [0, 1). تم التعديل في 28 يوليو 2021 بواسطة Meezo ML اقتباس
1 Ali Haidar Ahmad نشر 28 يوليو 2021 أرسل تقرير نشر 28 يوليو 2021 (معدل) عندما تكون عدد الأصناف n في مشكلتنا أكبر من 2، يجب أن تحوي طبقتك الأخيرة على n خلية بغض النظر عن نوع دالة التكلفة التي استخدمتها (أي حتى لو استخدمت sparse_categorical_crossentropy) حيث أن الغاية الأساسية من ال sparse_categorical_crossentropy هو الراحة في الاستخدام (عدم الاضطرار إلى تحويل البيانات إلى ترميز ال One-Hot)، لكنها لاتغنيك عن وجود عدد من الخلايا يطابق عدد الأصناف في آخر طبقة، وبما أنك تتعامل مع مهمة لتصنيف الأخبار ولديك 46 صنف وبالتالي يكون التصحيح: from keras.datasets import reuters (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=10000) word_index = reuters.get_word_index() reverse_word_index = dict([(value, key) for (key, value) in word_index.items()]) decoded_newswire = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]]) import numpy as np def vectorize_sequences(sequences, dimension=10000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) from keras.utils.np_utils import to_categorical one_hot_train_labels = to_categorical(train_labels) one_hot_test_labels = to_categorical(test_labels) from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(10000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(46, activation='softmax')) # يجب أن يتطابق عدد الأصناف مع عدد المخرجات model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy']) x_val = x_train[:1000] partial_x_train = x_train[1000:] y_val = train_labels[:1000] partial_y_train = train_labels[1000:] history = model.fit(partial_x_train, partial_y_train, epochs=20, batch_size=512, validation_data=(x_val, y_val)) للتنويه: هناك هدف آخر من استخدام sparse_categorical_crossentropy وهو زيادة الكفاءة في التخزين والأداء (فهي لاتحتاج إلى تمثيل الفئات في متجهات عالية الأبعاد إضافة إلى أنها تقلل عدد العمليات الحسابية اللازمة). تم التعديل في 28 يوليو 2021 بواسطة Ali Haidar Ahmad 1 اقتباس
1 Ahmed Sharshar نشر 28 يوليو 2021 أرسل تقرير نشر 28 يوليو 2021 تعبر رسالة المشكلة عن خطأ في عدد التصنيفات التي تريدها، بمعني أخر فان قاعدة البيانات التي تستخدمها dataset تحتوي على 46 صنفا من المخرجات (أي انها 46 نوعا مختلفا من البيانات) ، وأنت هنا وضعت فقط الخرج على انه صنفين: model.add(layers.Dense(1, activation='softmax')) الطبقة الأخيرة دائما، وهي أخر طبقة توضع في عملية التعلم مثل المثال السابق، يجب ان تحتوي على عدد المخرجات التي تريدها والتي يجب أن تتطابق مع طبيعه ال dataset، لان تلك الطبقة تقوم بعمل flatten او تسطيح للداتا بحيث أن كل نقطة تمثل خرجا ما، وبما أنك تحتاج الى استخراج 46 نوعا مختلفا، يجب أن يكون هناك 46 نقطة في أخر طبقة. مثال، الصورة التالية توضح نموذجا بسيطا بحيث أن اخر طبقة تحتوي على 4 نقاط، لذا فأن الخرج هنا هو 4 أصناف مختلفة: لذلك فإن حل مشكلتك بسيط: فقط قم بتعديل أخر طبقة لتكون 46 بدلا من 1 كالتالي: model.add(layers.Dense(46, activation='softmax')) اقتباس
السؤال
Meezo ML
أنا أعمل على مصنف لتصنيف الأخبار على مجموعة بيانات راوترز باستخدام keras، ، لكن أتلقى الخطأ التالي:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.