Chollet ML نشر 9 أغسطس 2021 أرسل تقرير نشر 9 أغسطس 2021 أحاول حفظ معلومات التدريب training history (نتائج ال loss وال accuracy خلال عملية التدريب بعد كل epoch) لكن يظهر لي الخطأ التالي: # تحميل الداتا from keras.datasets import boston_housing import keras (train_data, train_targets), (test_data, test_targets) = boston_housing.load_data() # توحيد البيانات mean = train_data.mean(axis=0) train_data -= mean std = train_data.std(axis=0) train_data /= std test_data -= mean test_data /= std from keras import models from keras import layers # بناء النموذج def build_model(): model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(train_data.shape[1],))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(1)) model.compile(optimizer='rmsprop', loss="mae", metrics=['mae']) return model # تدريب النموذج model = build_model() # قمنا بتدريب النموذج history=model.fit(train_data, train_targets,epochs=2, batch_size=64) import pickle with open('/f', 'wb') as f: pickle.dump(history, f) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-25-87b712a3ea34> in <module>() 1 import pickle 2 with open('/HistoryDict', 'wb') as f: ----> 3 pickle.dump(history, f) TypeError: can't pickle weakref objects اقتباس
1 Ali Haidar Ahmad نشر 9 أغسطس 2021 أرسل تقرير نشر 9 أغسطس 2021 (معدل) لو قمت بعرض نوع البيانات لل history فستجد: type(history) # keras.callbacks.History وهو يعتبر مرجع ضعيف weakref أو weak rederence (المرجع الضعيف لكائن ما هو المرجع الذي لا يمنع الكائن من أن يتم استعادته بواسطة أداة تجميع البيانات المهملة garbage collector) وفي هذه الحالة لن تتمكن من حفظه بهذه الطريقة. لذا يظهر الخطأ والحل هو بتخزين القاموس الذي يحتويه هذا المرجع من خلال الواصفة history وهي كل مايهمنا حيث تحتوي على المعلومات المطلوبة. أي يصبح الحل: #history انظر كيف سنحصل على المعلومات المطلوبة من خلال الواصفة history.history """ {'loss': [21.15315055847168, 19.5343074798584], 'mae': [21.15315055847168, 19.5343074798584]} """ import pickle with open('/HistoryDict', 'wb') as f: pickle.dump(history.history, f) history = pickle.load(open('/HistoryDict', "rb")) history """ {'loss': [21.15315055847168, 19.5343074798584], 'mae': [21.15315055847168, 19.5343074798584]} """ كما يمكنك حفظ النتائج بعدة طرق أخرى تجدها في الرابط التالي: تم التعديل في 9 أغسطس 2021 بواسطة Ali Haidar Ahmad اقتباس
1 Ahmed Sharshar نشر 10 أغسطس 2021 أرسل تقرير نشر 10 أغسطس 2021 (معدل) فقط طريقة استخدامها غير صحيح ، أنت هنا تحاول أن تستخدمها في حفظ واسترجاع البيانات (على الرغم انها ليست افضل طريقة لذلك) ، لكن حلها بسيط: انظر الكود المعدل التالي: # تحميل الداتا from keras.datasets import boston_housing import keras (train_data, train_targets), (test_data, test_targets) = boston_housing.load_data() # توحيد البيانات mean = train_data.mean(axis=0) train_data -= mean std = train_data.std(axis=0) train_data /= std test_data -= mean test_data /= std from keras import models from keras import layers # بناء النموذج def build_model(): model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(train_data.shape[1],))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(1)) model.compile(optimizer='rmsprop', loss="mae", metrics=['mae']) return model # تدريب النموذج model = build_model() # قمنا بتدريب النموذج history=model.fit(train_data, train_targets,epochs=2, batch_size=64) import pickle with open('/HistoryDict', 'wb') as f: pickle.dump(history.history, f) history = pickle.load(open('/HistoryDict', "rb")) يجب ان تقوم اولا بتحميل الملف الذي قمت بقرائته عن طريق فتحه بالطريقه ذاتها التي نقوم بها في قراءه اي ملف txt، بعد ذلك تقوم باستدعاء ما قمت بتحميه باستخدام pickle.load. اما عن طرق حفظ النموذج فهذه ليست افضل طريقة حيث أن الطريقة الرائجة هي باستخدام json و h5 لحفظ هيكل النموذج والاوزان المدربة. تم التعديل في 10 أغسطس 2021 بواسطة Ahmed Sharshar اقتباس
السؤال
Chollet ML
أحاول حفظ معلومات التدريب training history (نتائج ال loss وال accuracy خلال عملية التدريب بعد كل epoch) لكن يظهر لي الخطأ التالي:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.