Keras model.load_weights() error: ValueError: Invalid high library version bound (invalid high libra

Posted

技术标签:

【中文标题】Keras model.load_weights() error: ValueError: Invalid high library version bound (invalid high library version bound)【英文标题】: 【发布时间】:2020-01-21 00:22:33 【问题描述】:

我使用Docker from Gadgetron 来实现一个带有 Keras 的 Gadget。 Theano 作为后端。这是Dockerfile,pip list 的结果是

Package              Version    
-------------------- -----------
absl-py              0.7.1      
astor                0.8.0      
certifi              2019.6.16  
chardet              3.0.4      
cycler               0.10.0     
Cython               0.26.1     
decorator            4.4.0      
dicom                0.9.9.post1
dicom-numpy          0.1.6      
engineering-notation 0.6.0      
gast                 0.2.2      
google-pasta         0.1.7      
grpcio               1.21.1     
h5py                 2.9.0      
idna                 2.8        
imageio              2.5.0      
ismrmrd              1.6.1      
ismrmrd-python-tools 0.3        
joblib               0.13.2     
Keras                2.2.4      
Keras-Applications   1.0.8      
Keras-Preprocessing  1.1.0      
kiwisolver           1.1.0      
lxml                 4.2.1      
Markdown             3.1.1      
matplotlib           3.1.0      
networkx             2.3        
numpy                1.16.4     
opencv-python        4.1.0.25   
Pillow               6.0.0      
pip                  19.2.3     
protobuf             3.8.0      
psutil               5.4.2      
pydicom              1.2.2      
pygobject            3.26.1     
pynrrd               0.4.0      
pyparsing            2.4.0      
PyQt5                5.12.2     
PyQt5-sip            4.19.17    
python-apt           1.6.4      
python-dateutil      2.8.0      
pytz                 2019.2     
PyWavelets           1.0.3      
PyXB                 1.2.6      
PyYAML               5.1.1      
pyzmq                18.0.2     
requests             2.22.0     
scikit-image         0.15.0     
scikit-learn         0.21.2     
scipy                1.3.0      
setuptools           41.0.1     
six                  1.12.0     
sklearn              0.0        
tensorboard          1.14.0     
tensorboardX         1.8        
tensorflow           1.14.0     
tensorflow-estimator 1.14.0     
tensorflow-gpu       1.14.0     
termcolor            1.1.0      
Theano               1.0.4      
tk-tools             0.11.0     
torch                1.1.0      
torchfile            0.1.0      
torchvision          0.3.0      
tornado              6.0.3      
urllib3              1.25.3     
visdom               0.1.8.8    
websocket-client     0.56.0     
Werkzeug             0.15.4     
wheel                0.33.4     
wrapt                1.11.2     

我的代码是这样的:

from keras.models import model_from_json

with open('/opt/data/model.json', 'r') as f:
    model = model_from_json(f.read())
model.load_weights('/opt/data/weight.h5')

加载权重时出现错误:

File "/opt/data/CNNArt/Gadgetron/gadget_cnnart.py", line 29, in process
    model.load_weights('/opt/data/weight.h5')

  File "/usr/local/lib/python3.6/dist-packages/keras/engine/network.py", line 1157, in load_weights
    with h5py.File(filepath, mode='r') as f:

  File "/usr/local/lib/python3.6/dist-packages/h5py/_hl/files.py", line 391, in __init__
    fapl = make_fapl(driver, libver, rdcc_nslots, rdcc_nbytes, rdcc_w0, **kwds)

  File "/usr/local/lib/python3.6/dist-packages/h5py/_hl/files.py", line 108, in make_fapl
    plist.set_libver_bounds(low, high)

  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper

  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper

  File "h5py/h5p.pyx", line 1140, in h5py.h5p.PropFAID.set_libver_bounds

ValueError: Invalid high library version bound (invalid high library version bound)

但是,在 Docker 中,当我在终端中打开 python 时,我可以加载模型及其参数。

>>> from keras.models import model_from_json
>>> with open('/opt/data/model.json', 'r') as f:
...     model = model_from_json(f.read())
...
>>> model.load_weights('/opt/data/weight.h5')
>>> 

我尝试用pip 重新安装h5py,但它不起作用。

问题是它直接在 python 交互终端中工作,但在 Gadget 脚本中不起作用。

【问题讨论】:

你需要展示你的 Dockerfile 【参考方案1】:

我在使用tensorflow的时候也遇到了这个问题。

正如@so2liu 所说,请尝试:

pip install --no-binary=h5py h5py

但是,请确保选择与 tensorflow 或其他一些库兼容的版本,例如:

pip install --no-binary=h5py h5py==2.10.0

最后,请记住检查你的环境,因为你可能在 venv / conda / docker 中运行你的代码,但是你在错误的环境中安装了 h5py

【讨论】:

【参考方案2】:

我有类似的问题,我通过安装解决了它

sudo apt-get install python3-h5py

并确保 numpy 版本与 h5py 兼容

【讨论】:

【参考方案3】:

卸载 h5py 并使用以下命令重新安装:

pip install --no-binary=h5py h5py 

Source

【讨论】:

以上是关于Keras model.load_weights() error: ValueError: Invalid high library version bound (invalid high libra的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow+keras解决使用model.load_weights时报错 ‘str‘ object has no attribute ‘decode‘

Keras保存模型

我在 google colab 上训练了一个 keras 模型。现在无法在我的系统上本地加载它。

是否应该在使用 model.load_weights() 之前运行 model.compile(),如果模型只是稍微改变了说 dropout?

断点续训

转换后 TFLite 模型中缺少层