Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pyinstaller created exe file can not load a keras nn model

My python scrip includes:

from keras.models import model_from_json
model = model_from_json(open("test.json").read())
model.load_weights("test.h5")
model.compile(loss="mean_squared_error", optimizer = "adam")

Then, I created an exe file using pyinstaller from aforementioned script. The exe file can not load the saved model. Any thought on that would be appreciated.

like image 605
andre Avatar asked Mar 09 '23 06:03

andre


2 Answers

If you get errors about h5py submodules, try to use collect_submodules function to add them all to hidden_imports.

You probably noticed a file called myscript.spec generated by a pyinstaller. Inside this file is an instruction on how to build you script (and it's just a python code too!).

So try to edit this myscript.spec like this:

from PyInstaller.utils.hooks import collect_submodules

hidden_imports = collect_submodules('h5py')

a = Analysis(['myscript.py'],
         binaries=None,
         datas=[],
         hiddenimports=hidden_imports,
         hookspath=[],
         runtime_hooks=[],
         excludes=[],
         win_no_prefer_redirects=False,
         win_private_assemblies=False,
         cipher=None)

# ... rest of a file untouched

Then run pyinstaller against that file: pyinstaller myscript.spec.

like image 129
9dogs Avatar answered Apr 27 '23 05:04

9dogs


This resolved the error:

pyinstaller -w --hidden-import=h5py.defs --hidden-import=h5py.utils --hidden-import=h5py.h5ac --hidden-import=h5py._proxy myscript.py

like image 39
andre Avatar answered Apr 27 '23 05:04

andre