Файл не найден в pickle

#python #python-3.x

#python #python-3.x

Вопрос:

Я хочу сохранить режим машинного обучения, используя pickle

используя этот код

 picklepath='project_folder/cache/'
def get_model():
    try:
        foo = pickle.load(open(picklepath 'f_path.pkl', "rb"))
        return foo
    except (OSError, IOError) as e:
        model=Model("model")
        pickle.dump(model, open(picklepath 'f_path.pkl', "wb"))
        return model

model = get_model()
 

при запуске моего приложения появляется эта ошибка :

 pickle.dump(model, open(picklepath 'f_path.pkl', "wb"))r: C:/...../example/index.py
[Fri Dec 10 11:41:07.530565 2021] [cgi:error] [pid 3728:tid 1188] [client ::1:49914] AH01215: FileNotFoundError: [Errno 2] No such file or directory: '
 

Любое решение, спасибо

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

1. что вы используете для модели ML keras или tensorflow?

2. Существует ли папка, в которую вы хотите записать файл?

3. Вы проверили, что picklepath это то, что вы ожидаете, и это picklepath 'f_path.pkl' вычисляет разумное имя файла? Вы убедились, что вашей программе разрешено открывать файл с этим путем и именем?

4. Если у вас open() есть файл, он вам понадобится close() позже. Это проще сделать, используя with контекст.

5. @np8: Да, файл существует

Ответ №1:

Предполагая, что вы используете Keras для модели ML, вместо прямого использования pickle почему бы не использовать встроенные функции загрузки и сохранения модели Keras

 model = Sequential()
#model initializeation, layers and compiling goes here

#saving the weights of model
model.save_weights("project_folder/cache/model.h5")

#later when you want it just initialize empty model as usual
model = Sequential()
#your layers defination goes here
model.load_weights("project_folder/cache/model.h5")
 

Если вы хотите пропустить создание модели и определение слоев каждый раз, вы можете сохранить ее структуру в виде json

 with open("project_folder/cache/model.json", "w") as json_file:
    json_file.write(model.to_json())

#and later to load model structure
from keras.models import model_from_json
json_file = open('project_folder/cache/model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
model = model_from_json(loaded_model_json)
 

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

1. Спасибо за ответ, я использую ссылку на vosk api: github.com/alphacep/vosk-api он работает, но модель загружается постоянно и занимает около 30 секунд, решит ли ваше решение эту проблему, я не хочу создавать отдельный экземпляр для модели

2. я не думаю, что если сохранение модели требует времени, это как-то связано с тем, как мы сохраняем структуру и сложность модели, напрямую влияющие на это, насколько сложна ваша модель? например, количество слоев

3. Размер файлов модели составляет около 2,5 ГБ. Ссылка: alphacephei.com/vosk/models каждый раз, когда я запускаю свое приложение, оно загружает модель возврата модели («модель») есть ли какой-либо способ, чтобы при первом запуске приложения оно загружало модель и в дальнейшем использовало тот же экземпляр, я попробовал #model = Model(«модель»)@functools. lru_cache (maxsize = 128) также, но все та же проблема

4. Да, вы можете загрузить свою модель один раз и сохранить эту модель за сервисом flask или django, таким образом, вам нужно будет загружать int только один раз, а затем всегда использовать REST api для ввода результатов моделирования и teake

5. Могу ли я попробовать ваше решение?