• 0

ظهور الخطأ 'RuntimeError: You must compile your model before training/testing. Use `model.compile(optimizer, loss) في كيراس Keras

قمت ببناء النموذج التالي في كيراس لتصنيف الأخبار لكن يظهر لي الخطأ التالي:

from keras.datasets import reuters
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(
num_words=10000)
# تررميز البيانات
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)
x_val = x_train[:1000]
partial_x_train = x_train[1000:]
y_val = one_hot_train_labels[:1000]
partial_y_train = one_hot_train_labels[1000:]
# بناء النموذج
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'))
history = model.fit(partial_x_train,
partial_y_train,
epochs=6,
batch_size=512,
validation_data=(x_val, y_val))
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-3-4d4f3289469d> in <module>()
      3 epochs=6,
      4 batch_size=512,
----> 5 validation_data=(x_val, y_val))
1 frames
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py in _assert_compile_was_called(self)
   2666     # (i.e. whether the model is built and its inputs/outputs are set).
   2667     if not self._is_compiled:
-> 2668       raise RuntimeError('You must compile your model before '
   2669                          'training/testing. '
   2670                          'Use `model.compile(optimizer, loss)`.')
RuntimeError: You must compile your model before training/testing. Use `model.compile(optimizer, loss)`.

ما المشكلة؟

تمّ تعديل بواسطة Chollet ML

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


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

من أجل تشغيل الموديل الخاص بك، يجب ان تقوم بعمل compile وهي الدالة التي تقوم بتجميع وتشغيل كل ما تم بناءه في الخطوات السابقة كلها.

وتكون الدالة compile على الشكل التالي:

Model.compile(
    optimizer="rmsprop",
    loss=None,
    metrics=None,
    loss_weights=None,
    weighted_metrics=None,
    run_eagerly=None,
    steps_per_execution=None,
    **kwargs
)

بشكل عام نهتم بأول 3 متغيرات فقط لتعديلها:

  • optimizer: وهو المحسن الذي نريد استخدامه
  • loss: وهي دالة الفقد التي نريد استخدامها
  • metrics: وهي المعيار الذي نريد حساب الكفاءه منه

كل ما نريد تعديله في الكود الخاص بك هو تعديل فقط اخر جزء بزيادة الدالة compile لها لتكون كالتالي:

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='categorical_crossentropy',
metrics=['acc'])

history = model.fit(partial_x_train,
partial_y_train,
epochs=6,
batch_size=512,
validation_data=(x_val, y_val))

 

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


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

يجب أن تقوم بعمل Compile للنموذج (ترجمة له) بحيث تحدد له معلومات مثل نوع دالة التكلفة والمعيار الذي تريد تطبيقه لحساب الدقة أثناء التدريب.

Model.compile(
    optimizer="rmsprop", # المحسن الذي تريد تطبيقه
    loss=None, # دالة التكلفة التي تريد تطبيقها
    metrics=None, # معيار حساب الكفاءة
)

أي يصبح نموذجك:

from keras.datasets import reuters
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(
num_words=10000)
# تررميز البيانات
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)
x_val = x_train[:1000]
partial_x_train = x_train[1000:]
y_val = one_hot_train_labels[:1000]
partial_y_train = one_hot_train_labels[1000:]
# بناء النموذج
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='categorical_crossentropy',
metrics=['acc'])
# التدريب
history = model.fit(partial_x_train,
partial_y_train,
epochs=6,
batch_size=512,
validation_data=(x_val, y_val))

حيث نقوم بعملية التجميع أو الترجمة compile قبل عملية التدريب. لكي يفهم النموذج ماهي دالة الخسارة وماهو معيار الدقة و ال optimizer الذي سيستخدمه. وفي حالتك فإن مهمتك هي مهمة تصنيف متعدد وبالتالي يجب أن تستخدم دالة تكلفة تناسب مهمتك، وبما أن بياناتك مرمزة بترميز onehot وبالتالي يجب أن تستخدم دالة التكلفة categorical_crossentropy أما المعيار فيمكنك تحديد accuracy أو معيار آخر مثل categorical_crossentropy .أما بالنسبة لل optimizer فتمنحك كيراس كل الخيارات وأبرزها adam و rmsprop.

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


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

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

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

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


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

تسجيل الدخول

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


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