我正在使用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层,j = 1 #inputs = 36,对于j > 1个输入= #cells(j-1)。然后,这些矩阵应存储为numpy数组。
我总共有5层,这应该给我5个权重和偏差矩阵。我尝试用熊猫加载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”。谁能帮我?预先感谢。
答案 0 :(得分:2)
为什么不使用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)