اذهب إلى المحتوى
  • 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

Recommended Posts

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...