J'utilise KerasClassifier pour former le classificateur.
Le code est ci-dessous:
import numpy
from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load dataset
dataframe = read_csv("iris.csv", header=None)
dataset = dataframe.values
X = dataset[:,0:4].astype(float)
Y = dataset[:,4]
# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
#print("encoded_Y")
#print(encoded_Y)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)
#print("dummy_y")
#print(dummy_y)
# define baseline model
def baseline_model():
# create model
model = Sequential()
model.add(Dense(4, input_dim=4, init='normal', activation='relu'))
#model.add(Dense(4, init='normal', activation='relu'))
model.add(Dense(3, init='normal', activation='softmax'))
# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
estimator = KerasClassifier(build_fn=baseline_model, nb_Epoch=200, batch_size=5, verbose=0)
#global_model = baseline_model()
kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(estimator, X, dummy_y, cv=kfold)
print("Accuracy: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
Mais comment sauvegarder le modèle final pour les prévisions futures?
J'utilise habituellement le code ci-dessous pour enregistrer le modèle:
# serialize model to JSON
model_json = model.to_json()
with open("model.json", "w") as json_file:
json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("model.h5")
print("Saved model to disk")
Mais je ne sais pas comment insérer le code du modèle de sauvegarde dans le code de KerasClassifier.
Je vous remercie.
Le modèle utilise une méthode save
, qui enregistre tous les détails nécessaires à la reconstitution du modèle. Un exemple tiré de la documentation keras :
from keras.models import load_model
model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
del model # deletes the existing model
# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')
vous pouvez enregistrer le modèle dans json et le pondérer dans un format de fichier hdf5.
# keras library import for Saving and loading model and weights
from keras.models import model_from_json
from keras.models import load_model
# serialize model to JSON
# the keras model which is trained is defined as 'model' in this example
model_json = model.to_json()
with open("model_num.json", "w") as json_file:
json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("model_num.h5")
les fichiers "model_num.h5" et "model_num.json" contenant notre modèle et nos poids sont créés
Pour utiliser le même modèle expérimenté pour des tests ultérieurs, vous pouvez simplement charger le fichier hdf5 et l’utiliser pour la prédiction de différentes données. voici comment charger le modèle à partir de fichiers sauvegardés.
# load json and create model
json_file = open('model_num.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# load weights into new model
loaded_model.load_weights("model_num.h5")
print("Loaded model from disk")
loaded_model.save('model_num.hdf5')
loaded_model=load_model('model_num.hdf5')
Pour prédire pour différentes données, vous pouvez utiliser cette
loaded_model.predict_classes("your_test_data here")
Vous pouvez utiliser model.save(filepath)
pour enregistrer un modèle Keras dans un seul fichier HDF5 qui contiendra:
Dans votre code Python, la dernière ligne devrait être:
model.save("m.hdf5")
Cela vous permet de sauvegarder l'intégralité de l'état d'un modèle dans un seul fichier. Les modèles enregistrés peuvent être rétablis via keras.models.load_model()
.
Le modèle renvoyé par load_model()
est un modèle compilé prêt à être utilisé (à moins que le modèle enregistré n'ait jamais été compilé).
model.save()
arguments:
vous pouvez enregistrer le modèle et le charger de cette manière.
from keras.models import Sequential
from keras_contrib.losses import import crf_loss
from keras_contrib.metrics import crf_viterbi_accuracy
# To save model
model.save('my_model_01.hdf5')
# To load the model
custom_objects={'CRF': CRF,'crf_loss':crf_loss,'crf_viterbi_accuracy':crf_viterbi_accuracy}
# To load a persisted model that uses the CRF layer
model1 = load_model("/home/abc/my_model_01.hdf5", custom_objects = custom_objects)