Создание файла pickle для модели машинного обучения

#python #nlp #pickle

#python #nlp #pickle

Вопрос:

Что я пытаюсь сделать, так это загрузить модель машинного обучения для генерации сводки в объект pickle, чтобы при развертывании кода в моем веб-приложении он не выполнял ручную загрузку снова и снова. Это занимает довольно много времени, и я не могу позволить себе, чтобы пользователь ждал 10-15 минут, пока загружается модель, а затем генерируется сводка.

     import cPickle as pickle
    from skip_thoughts import configuration
    from skip_thoughts import encoder_manager
    import en_coref_md

    def load_models():
        VOCAB_FILE = "skip_thoughts_uni/vocab.txt"
        EMBEDDING_MATRIX_FILE = "skip_thoughts_uni/embeddings.npy"
        CHECKPOINT_PATH = "skip_thoughts_uni/model.ckpt-501424"
        encoder = encoder_manager.EncoderManager()
        print "loading skip model"
        encoder.load_model(configuration.model_config(),
            vocabulary_file=VOCAB_FILE,
            embedding_matrix_file=EMBEDDING_MATRIX_FILE,
            checkpoint_path=CHECKPOINT_PATH)
        print "loaded"
        return encoder

    encoder= load_models()
    print "Starting cPickle dumping"
    pickle.dump(encoder, open('/path_to_loaded_model/loaded_model.pkl', "wb"))
    print "pickle.dump executed"
    print "starting cpickle loading"
    loaded_model = pickle.load(open('loaded_model.pkl', 'r'))
    print "pickle load done"
 

Изначально cPickle был pickle, но ни один из них не сделал этого за достаточное время. В первый раз, когда я попытался это сделать, создаваемый файл рассола составлял 11,2 ГБ, что, по-моему, слишком велико. И тем временем потребовалось более часа, чтобы сделать мой компьютер бесполезным. И выполнение кода не было завершено, я принудительно перезапустил свой компьютер, потому что это заняло слишком много времени.

Я был бы очень признателен, если бы кто-нибудь мог помочь.

Комментарии:

1. вы пробовали использовать hdf5? Вот пример machinelearningmastery.com/save-load-keras-deep-learning-models

2. @VnC модели обучаются с использованием тензорного потока, а не keras. Я полагаю, что такие методы, как model_from_json, не будут работать

Ответ №1:

Я бы посоветовал проверить, улучшает ли сохранение в hdf5 производительность:

Запись в hdf5:

 with h5py.File('model.hdf5', 'w') as f:
    for var in tf.trainable_variables():
        key = var.name.replace('/', ' ')
        value = session.run(var)
        f.create_dataset(key, data=value)
 

Чтение из hdf5:

 with h5py.File('model.hdf5', 'r') as f:
    for (name, val) in f.items()
        name = name.replace(' ', '/')
        val = np.array(val)
        session.run(param_setters[name][0], { param_setters[name][1]: val })
 

Источники:

https://www.tensorflow.org/tutorials/keras/save_and_restore_models

https://geekyisawesome.blogspot.com/2018/06/savingloading-tensorflow-model-using.html