如何在没有模型的情况下读取keras模型权重

Ant*_*ina 4 python keras

keras模型可以保存在两个文件中.一个文件具有模型体系结构.另一个是模型权重,权重由方法保存model.save_weights().然后可以加载权重model.load_weights(file_path).它假定模型存在.我只需要加载没有模型的权重.我试着用pickle.load().

with open(file_path, 'rb') as fp:
    w = pickle.load(fp)
Run Code Online (Sandbox Code Playgroud)

但它给出了错误

_pickle.UnpicklingError: invalid load key, 'H'.
Run Code Online (Sandbox Code Playgroud)

我认为权重文件以不兼容的方式保存.是否可以从model.save_weights()创建的文件中仅加载权重?

nur*_*ric 12

数据格式为h5,因此您可以直接使用h5py库来检查和加载权重.从快速入门指南:

import h5py
f = h5py.File('weights.h5', 'r')
print(list(f.keys())
# will get a list of layer names which you can use as index
d = f['dense']['dense_1']['kernel:0']
# <HDF5 dataset "kernel:0": shape (128, 1), type "<f4">
d.shape == (128, 1)
d[0] == array([-0.14390108], dtype=float32)
# etc.
Run Code Online (Sandbox Code Playgroud)

该文件包含属性,包括图层的权重,您可以详细探索存储的内容和方式.如果你想要一个可视版本,那么也有h5pyViewer.