Chollet ML نشر 4 أغسطس 2021 أرسل تقرير نشر 4 أغسطس 2021 قمت ببناء النموذج التالي لتصنيف مراجعات الأفلام، لكن يظهر لي الخطأ التالي عند محاولة تدريب النموذج: from keras.layers import Embedding from keras.datasets import imdb from keras import preprocessing import keras max_features = 10000 maxlen = 20 (x_train, y_train), (x_test, y_test) = imdb.load_data( num_words=max_features) x_train = preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen) x_test = preprocessing.sequence.pad_sequences(x_test, maxlen=maxlen) from keras.models import Sequential from keras.layers import Flatten, Dense model = Sequential() model.add(Embedding(10000, 8, input_length=maxlen)) model.add(Flatten()) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', metrics=['BinaryAccuracy']) history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2) ------------------------------------------------------------------------------ ValueError: No gradients provided for any variable: ['embedding_3/embeddings:0', 'dense_3/kernel:0', 'dense_3/bias:0']. هل من حل؟ اقتباس
0 Ali Haidar Ahmad نشر 4 أغسطس 2021 أرسل تقرير نشر 4 أغسطس 2021 يجب أن تقوم بتحديد دالة لحساب التكلفة أي (loss function) فعدم تحديد دالة التكلفة يجعل نموذجك عاجزاً عن حساب ال gradients أو المشتقات، فال gradients تنتج من اشتقاق تابع التكلفة بالنسبة للأوزان التدريبية. وبالتالي يظهر الخطأ. وكون مهمتك هي مهمة تصنيف ثنائي فيمكنك استخدام ال BinaryCrossentropy كدالة تكلفة ممتازة جداً لمشكلتك ولأغلب مشاكل التصنيف الثنائي. أي قم بتعديل نموذجك بالشكل: from keras.layers import Embedding from keras.datasets import imdb from keras import preprocessing import keras max_features = 10000 maxlen = 20 (x_train, y_train), (x_test, y_test) = imdb.load_data( num_words=max_features) x_train = preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen) x_test = preprocessing.sequence.pad_sequences(x_test, maxlen=maxlen) from keras.models import Sequential from keras.layers import Flatten, Dense model = Sequential() model.add(Embedding(10000, 8, input_length=maxlen)) model.add(Flatten()) model.add(Dense(1, activation='sigmoid')) ############################## هنا ######################### model.compile(optimizer='rmsprop', loss=keras.losses.BinaryCrossentropy(), metrics=['BinaryAccuracy']) ####################################################### history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2) وفي الرابط هنا تجد توضيح كامل لهذه الدالة: اقتباس
0 Ahmed Sharshar نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 أنت لم تقم باستخدام أي دالة لحساب ال loss ، وهذة العملية اساسية في التعلم حيث أنها تحدد مصير استكمال عملية التعلم، وذلك لانها تقوم بحساب المشتقات ومنها تحسب الفرق بين القيم الحقيقية والقيم التي تم توقعها، وعلى هذا الاساس اما ان تكمل عملية التعلم او تتوقف. اذا بدون هذة الدالة لن يتسطيع بدأ عملية التعلم من الاساس. وهناك العديد من دوال ال loss التي يمكنك استخدامها ، منها الدالة BinaryCrossentropy() أو CategoricalCrossentropy K، والكثير من الدوال الاخرى، يمكنك البحث عن loss functions في كيراس واختيار ما يناسبك منهم. بعد التعديل يجب اضافة ال loss كما موضح في الكود التالي: from keras.layers import Embedding from keras.datasets import imdb from keras import preprocessing import keras max_features = 10000 maxlen = 20 (x_train, y_train), (x_test, y_test) = imdb.load_data( num_words=max_features) x_train = preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen) x_test = preprocessing.sequence.pad_sequences(x_test, maxlen=maxlen) from keras.models import Sequential from keras.layers import Flatten, Dense model = Sequential() model.add(Embedding(10000, 8, input_length=maxlen)) model.add(Flatten()) model.add(Dense(1, activation='sigmoid')) ###هنا model.compile(optimizer='rmsprop', loss=keras.losses.BinaryCrossentropy(), metrics=['CategoricalCrossentropy']) history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2) اقتباس
السؤال
Chollet ML
قمت ببناء النموذج التالي لتصنيف مراجعات الأفلام، لكن يظهر لي الخطأ التالي عند محاولة تدريب النموذج:
هل من حل؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.