• 0

حفظ معلومات التدريب training history في كيراس Keras

كيف نقوم بحفظ معلومات التدريب training history في كيراس Keras؟ فقد قمت بتدريب النموذج وقمت بتخزين النتائج، لكن كيف يمكننا حفظها لاستخدامها لاحقاً؟

history = Model.fit(X_train, y_train, batch_size=32, 
                    nb_epoch=41)

 

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


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

بفرض لدينا النموذج التالي، الذي قمنا بتدريبه:

# تحميل الداتا
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()
# قمنا بتدريب النموذج
hisyory=model.fit(train_data, train_targets,epochs=2, batch_size=64)
---------------------------------------------------------------------------------------------
"""
Epoch 1/2
7/7 [==============================] - 1s 2ms/step - loss: 21.4842 - mae: 21.4842
Epoch 2/2
7/7 [==============================] - 0s 3ms/step - loss: 20.2813 - mae: 20.2813
"""

يمكنك حفظ النتائج في ملفات pickle بالشكل التالي:

hisyory.history
"""
{'loss': [21.15315055847168, 19.5343074798584],
 'mae': [21.15315055847168, 19.5343074798584]}
"""
import pickle
with open('/HistoryDict', 'wb') as f:
     pickle.dump(hisyory.history, f)
history = pickle.load(open('/HistoryDict', "rb"))
history
"""
{'loss': [21.15315055847168, 19.5343074798584],
 'mae': [21.15315055847168, 19.5343074798584]}
"""

أو كملفات json:

import json
with open('file.json', 'w') as f:
    json.dump(hisyory.history, f)
history1 = json.load(open('file.json'))
history1
"""
{'loss': [21.15315055847168, 19.5343074798584],
 'mae': [21.15315055847168, 19.5343074798584]}
"""

أو بالشكل التالي:

# حفظها
np.save('my_history.npy',hisyory.history)
load=np.load('my_history.npy',allow_pickle='TRUE').item()
load
"""
{'loss': [21.15315055847168, 19.5343074798584],
 'mae': [21.15315055847168, 19.5343074798584]}
"""

أو يمكنك تحويلها لداتافريم Dataframe ثم يمكنك حفظها كملفات CSV:

import pandas as pd
df = pd.DataFrame(hisyory.history) 
print(df.head(n=1))
"""
        loss        mae
0  21.153151  21.153151
"""
with open('history.csv', mode='w') as f:
    df.to_csv(f)
# إعادة تحميله
data = pd.read_csv("history.csv") 
data.head()
"""
Unnamed: 0 	loss 	mae
0 	0 	21.153151 	21.153151
1 	1 	19.534307 	19.534307
"""

 

1 شخص أعجب بهذا

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


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

هناك  اكثر من طريقة لحفظها لكن اشهرها واكثرها استخداما هي باستخدام json لحفظ هيكل النموذج و h5 لحفظ الاوزان، انظر الكود التالي:

# MLP for Pima Indians Dataset Serialize to JSON and HDF5
from keras.models import Sequential
from keras.layers import Dense
from keras.models import model_from_json
import numpy
import os
# هنا نقوم ببناء النموذج الخاص بنا
# fix random seed for reproducibility
numpy.random.seed(7)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
# create model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=150, batch_size=10, verbose=0)
# evaluate the model
scores = model.evaluate(X, Y, verbose=0)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
 
# نقوم بتحويل النموذج الي json وحفظه
model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)
# نقوم بتحويل الاوزان الي h5 وحفظها
model.save_weights("model.h5")
print("Saved model to disk")

 
# نقوم بتحميل ملف ال json عندما نحتاجه
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# نقوم بتحميل الاوزان من ملف h5 عندما نحتاجها
loaded_model.load_weights("model.h5")
print("Loaded model from disk")
 
# نقوم بتجريب النموذج الذي قمنا بتحميله
loaded_model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
score = loaded_model.evaluate(X, Y, verbose=0)
print("%s: %.2f%%" % (loaded_model.metrics_names[1], score[1]*100))

يمكنك أن تري ان ملف ال json يقوم بحفظ تفاصيل شكل النموذج بداخله، اذا قمت بفتحه ستجد الشكل التالي (في الواقع معرفتك لشكله لا تهم هي فقط للمعرفه):

{  
   "class_name":"Sequential",
   "config":{  
      "name":"sequential_1",
      "layers":[  
         {  
            "class_name":"Dense",
            "config":{  
               "name":"dense_1",
               "trainable":true,
               "batch_input_shape":[  
                  null,
                  8
               ],
               "dtype":"float32",
               "units":12,
               "activation":"relu",
               "use_bias":true,
               "kernel_initializer":{  
                  "class_name":"VarianceScaling",
                  "config":{  
                     "scale":1.0,
                     "mode":"fan_avg",
                     "distribution":"uniform",
                     "seed":null
                  }
               },
               "bias_initializer":{  
                  "class_name":"Zeros",
                  "config":{  

                  }
               },
               "kernel_regularizer":null,
               "bias_regularizer":null,
               "activity_regularizer":null,
               "kernel_constraint":null,
               "bias_constraint":null
            }
         },
         {  
            "class_name":"Dense",
            "config":{  
               "name":"dense_2",
               "trainable":true,
               "dtype":"float32",
               "units":8,
               "activation":"relu",
               "use_bias":true,
               "kernel_initializer":{  
                  "class_name":"VarianceScaling",
                  "config":{  
                     "scale":1.0,
                     "mode":"fan_avg",
                     "distribution":"uniform",
                     "seed":null
                  }
               },
               "bias_initializer":{  
                  "class_name":"Zeros",
                  "config":{  

                  }
               },
               "kernel_regularizer":null,
               "bias_regularizer":null,
               "activity_regularizer":null,
               "kernel_constraint":null,
               "bias_constraint":null
            }
         },
         {  
            "class_name":"Dense",
            "config":{  
               "name":"dense_3",
               "trainable":true,
               "dtype":"float32",
               "units":1,
               "activation":"sigmoid",
               "use_bias":true,
               "kernel_initializer":{  
                  "class_name":"VarianceScaling",
                  "config":{  
                     "scale":1.0,
                     "mode":"fan_avg",
                     "distribution":"uniform",
                     "seed":null
                  }
               },
               "bias_initializer":{  
                  "class_name":"Zeros",
                  "config":{  

                  }
               },
               "kernel_regularizer":null,
               "bias_regularizer":null,
               "activity_regularizer":null,
               "kernel_constraint":null,
               "bias_constraint":null
            }
         }
      ]
   },
   "keras_version":"2.2.5",
   "backend":"tensorflow"
}

 

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


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

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

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

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


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

تسجيل الدخول

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


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