2017-07-24 5 views
0

Pouvons-nous sauvegarder les modèles LSTM créés eux-mêmes? Je crois que "pickling" est la méthode standard pour sérialiser des objets python dans un fichier. Idéalement, je voulais créer un module python contenant une ou plusieurs fonctions qui me permettaient soit de spécifier un modèle LSTM à charger, soit d'utiliser un modèle de pré-ajustement codé en dur pour générer des prévisions basées sur les données transmises pour initialiser le modèle.PicklingError: Impossible de sélectionner <class 'module'>: le module de recherche d'attribut sur builtins a échoué

J'ai essayé de l'utiliser mais m'a donné une erreur.

Code qui je:

# create and fit the LSTM network 
batch_size = 1 
model = Sequential() 
model.add(LSTM(50, batch_input_shape=(batch_size, look_back, 1), stateful=True, return_sequences=True)) 
model.add(Dropout(0.3)) 
model.add(Activation('relu')) 
model.add(LSTM(50, batch_input_shape=(batch_size, look_back, 1), stateful=True)) 
model.add(Dropout(0.3)) 
model.add(Activation('relu')) 
model.add(Dense(1)) 
model.add(Activation('relu')) 
model.compile(loss='mean_squared_error', optimizer='adam', metrics = ['accuracy']) 
for i in range(10): 
    model.fit(trainX, trainY, epochs=1, batch_size=batch_size, verbose=2, shuffle=False) 
    model.reset_states() 

with open ('sequential.pickle','wb') as f: 
    pickle.dump(model,f) 

pickle_in = open ('sequential.pickle','rb') 
model = pickle.load(pickle_in) 

# make predictions 
trainPredict = model.predict(trainX, batch_size=batch_size) 
model.reset_states() 
testPredict = model.predict(testX, batch_size=batch_size) 

Répondre

2

De l'documentation:

It is not recommended to use pickle or cPickle to save a Keras model.

You can use model.save(filepath) to save a Keras model into a single HDF5 file which will contain:

  • the architecture of the model, allowing to re-create the model
  • the weights of the model
  • the training configuration (loss, optimizer)
  • the state of the optimizer, allowing to resume training exactly where you left off. You can then use keras.models.load_model(filepath) to reinstantiate your model.

Pour enregistrer votre modèle, vous auriez besoin d'appeler model.save:

model.save('model.h5') # creates a HDF5 file 'model.h5' 

De même, le chargement le modèle est fait comme ceci:

from keras.models import load_model 
model = load_model('model.h5') 
+1

@coldspeed Grande aide. Apprécié. – Ukesh