#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. Могу ли я попробовать ваше решение?