اذهب إلى المحتوى

السؤال

نشر

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

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'].

هل من حل؟

Recommended Posts

  • 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)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...