Как экспортировать модель, созданную из KerasClassifier и Gridsearchcv, используя joblib или pickle? - PullRequest
0 голосов
/ 23 января 2020
def network(optimizers='rmsprop'):

    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Embedding(vocab_size, 100, weights=[embedding_matrix], input_length=length, trainable=True))
    # model.add(LSTM(50, recurrent_dropout=.20))

    model.add(tf.keras.layers.Dense(8, activation='relu')) 
    # model.add(Dense(200, activation='relu'))
    model.add(tf.keras.layers.Dropout(.40))
    # model.add(Flatten())
    model.add(tf.keras.layers.Dense(50, activation='relu'))
    # model.add(Dropout(.3))
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(8, activation='sigmoid'))

    #model compile 
    model.compile(optimizer=optimizers, loss='binary_crossentropy', metrics=['accuracy'])
    return model 

num_tags = 8
#create hyperparameter search space 
epochs = [25, 50]
batches = [5, 10, 100]
optimizers = ['rmsprop', 'adam']
neural_network = KerasClassifier(build_fn=network, verbose = 1)
hyperparamters = dict(optimizers=optimizers, epochs=epochs, batch_size = batches)
grid = GridSearchCV(estimator=neural_network, cv=2, param_grid=hyperparamters)
grid.fit(X_train, Ytrain)

Я пытаюсь сохранить модель, используя pickle, как это:

import pickle
pickle.dump(grid,open('keras_saved_model.pickle', 'wb'))

Это ошибка, которую я получаю:

TypeError                                 Traceback (most recent call last)
<ipython-input-24-07d3687ecaaf> in <module>()
      1 import pickle
----> 2 pickle.dump(grid,open('keras_saved_model.pickle', 'wb'))

TypeError: can't pickle _thread._local objects

Я также пробовал joblib, но это показывая мне ту же ошибку.

from sklearn.externals import joblib
joblib.dump(grid.best_estimator_, 'keras_saved_model.pkl')

Любая помощь будет принята с благодарностью! ..

...