hdf5 文件中的权重和偏差

Posted

技术标签:

【中文标题】hdf5 文件中的权重和偏差【英文标题】:weights and biases from hdf5 file 【发布时间】:2019-08-04 22:46:19 【问题描述】:

我正在使用 Keras 和 Tensorflow 来训练神经网络。通过提前停止回调,我正在保存包含权重和偏差的 hdf5 文件:

file_path = "data/weights-improvement-epoch:02d-val_loss:.2f.hdf5"

save_best_callback = ModelCheckpoint(file_path, monitor='val_loss', verbose=1, save_best_only=True,
                                     save_weights_only=False, mode='auto', period=1)


# model
visible = Input(shape=(36,))

x = Dense(40, activation='tanh')(visible) 
x = Dense(45, activation='tanh')(x) 
x = Dense(30, activation='tanh')(x) 
x = Dense(55, activation='tanh')(x)

output = Dense(5, activation='tanh')(x)

通常,我使用

weights_1 = model.layers[1].get_weights()[0]
biases_1 = model.layers[1].get_weights()[1]

一层。

不知何故,当我在一夜之间运行我的脚本时,权重和偏差无法保存(这很不寻常,未能创建 hdf5 文件)。现在我有多个 hdf5 文件,我想从中选择最后一个可以保存的文件来加载我的权重和偏差。

我希望每一层的权重矩阵具有形式 (#cells x #inputs) 和偏置矩阵具有形式 (#cells x 1),而对于层 j=1 #inputs = 36 和 j >1 个输入 = #cells(j-1)。然后这些矩阵应该存储为 numpy 数组。

我总共有 5 层,这应该给我 5 个权重和偏差矩阵。我尝试用 pandas 加载 hdf5 文件:

import numpy as np
import pandas as pd

array = np.fromfile('data/weights-improvement-446-0.00.hdf5', dtype=float)
df_array = pd.DataFrame(array)
print(df_array)

但这只是给了我一个由 1 列和 m 行组成的数据框,其中一些元素是“NaN”。谁能帮我?提前致谢。

【问题讨论】:

你不能用 numpy 加载 HDF5,你需要使用 hdf5 库(如 h5py)。 可以加载,就是不符合我的目的。 是的,它不匹配,因为您使用了错误的 API,np.fromfile 不支持 HDF5 格式,它只是将整个文件解释为二进制数据,这解释了为什么您得到不正确的值 我同意这一点。 【参考方案1】:

为什么不使用 keras load_model API?如果只是权重,请使用 load_weights API。

>>> from keras.models import load_model
>>> model = load_model('data/weights-improvement-446-0.00.hdf5')
>>> for layer in model.layers:
>>>     if len(layer.weights) > 0:
>>>         print(layer.name, layer.weights[0].shape)

【讨论】:

我不知道我可以这样加载模型。我没有使用“layer.weights[0].shape”,而是使用了“model.layers[1].get_weights()[0]”,效果很好。

以上是关于hdf5 文件中的权重和偏差的主要内容,如果未能解决你的问题,请参考以下文章

model.compile() 是不是初始化 Keras(tensorflow 后端)中的所有权重和偏差?

将 Keras 模型 HDF5 文件存储到 SQL 数据库

Transformers 和 PyTorch 的权重和偏差?

如何显示 LinearRegression() 的权重和偏差?

为啥偏差比权重更频繁地变化?

在 PyTorch 中,默认情况下如何初始化层权重和偏差?