• 0

ظهور الخطأ ValueError: No gradients provided for any variable في كيراس Keras

قمت ببناء النموذج التالي لتصنيف مراجعات الأفلام، لكن يظهر لي الخطأ التالي عند محاولة تدريب النموذج:

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

يجب أن تقوم بتحديد دالة لحساب التكلفة أي (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

أنت لم تقم باستخدام أي دالة لحساب ال 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)

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن