Keras加载权重:OSError:无法打开文件(截断文件:eof = 41091072)

时间:2017-07-09 13:35:05

标签: python keras h5py

当我尝试使用keras'model.load_weights I get OSError: Unable to open file (Truncated file: eof = 41091072)加载权重时,这是完整的错误跟踪:

model.load_weights(get_file(fname, "E:/Work/Practical\ Deep\ Learning\ Course/my\ notebooks/lesson1/vgg16.h5", cache_subdir='models'))
    141 
    142 

C:\....\Anaconda3\envs\tensorflow\lib\site-packages\keras\engine\topology.py in load_weights(self, filepath, by_name)
   2700         """
   2701         import h5py
-> 2702         f = h5py.File(filepath, mode='r')
   2703         if 'layer_names' not in f.attrs and 'model_weights' in f:
   2704             f = f['model_weights']

C:\....\Anaconda3\envs\tensorflow\lib\site-packages\h5py\_hl\files.py in __init__(self, name, mode, driver, libver, userblock_size, swmr, **kwds)
    269 
    270                 fapl = make_fapl(driver, libver, **kwds)
--> 271                 fid = make_fid(name, mode, userblock_size, fapl, swmr=swmr)
    272 
    273                 if swmr_support:

C:\....\Anaconda3\envs\tensorflow\lib\site-packages\h5py\_hl\files.py in make_fid(name, mode, userblock_size, fapl, fcpl, swmr)
     99         if swmr and swmr_support:
    100             flags |= h5f.ACC_SWMR_READ
--> 101         fid = h5f.open(name, flags, fapl=fapl)
    102     elif mode == 'r+':
    103         fid = h5f.open(name, h5f.ACC_RDWR, fapl=fapl)

h5py\_objects.pyx in h5py._objects.with_phil.wrapper (D:\Build\h5py\h5py-2.7.0\h5py\_objects.c:2853)()

h5py\_objects.pyx in h5py._objects.with_phil.wrapper (D:\Build\h5py\h5py-2.7.0\h5py\_objects.c:2811)()

h5py\h5f.pyx in h5py.h5f.open (D:\Build\h5py\h5py-2.7.0\h5py\h5f.c:2130)()

OSError: Unable to open file (Truncated file: eof = 41091072, sblock->base_addr = 0, stored_eoa = 553482496)

我该如何处理?

4 个答案:

答案 0 :(得分:1)

我通过在加载 h5 文件之前添加此代码解决了这个问题。

from keras import models    
model = models.Sequential()

答案 1 :(得分:1)

此错误表示无论出于何种原因,存储在文件中的模型权重都无法加载到您生成的模型对象中。此错误有多种潜在原因。

  1. 没有创建模型对象来加载权重。正如 Frightera 所说,这个错误可能是由于没有首先创建模型对象来映射权重。当这是原因时,如果权重来自序列模型,则可以通过使用以下代码创建模型对象来修复错误:

    从 keras 导入模型
    模型 = 模型.Sequential()

  2. 模型对象结构与您尝试加载的权重结构不匹配。此错误也可能是由于尝试将模型权重加载到 没有相同数量和类型的模型 保存权重的超参数。要检查这一点,请确保模型中的超参数数量与保存的权重匹配。

  3. 保存的权重已损坏。 正如用户 qed 所指出的,您尝试加载到模型中的权重文件可能已损坏或未完全下载。尝试重新下载权重,如果失败,请考虑重新训练模型。

这绝不是一个详尽的清单。如果人们对潜在原因和解决此错误的方法提出了更多想法,请对此答案发表评论,我会尝试将其添加到此答案中。

答案 2 :(得分:-1)

我的是Windows10。这解决了我的错误- 走这条路 C:\ Users \ you_name \ .keras \ models \ vggface 并删除h5文件,然后重新运行代码。

答案 3 :(得分:-2)

哦!我刚找到路,删除训练前模型“ **。h5”,然后重新下载。