保存了预训练模型层权重,但无法通过 H5PY 加载权重

时间:2021-04-13 11:38:17

标签: python tensorflow keras neural-network

我一直在尝试保存我的神经网络模型的权重,以便我可以将其中的一些层用于另一个神经网络模型,以便在另一个数据集上进行训练。

预训练模型:

model = Sequential()
model.add(tf.keras.layers.Dense(100, input_shape=(X_train_orig_sm.shape)))
model.add(tf.keras.layers.Activation('relu'))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(10))
model.add(tf.keras.layers.Activation('relu'))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(1))
model.add(tf.keras.layers.Activation('sigmoid'))

model.summary()
# need sparse otherwise shape is wrong. check why
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

print('Fitting the data to the model')
batch_size = 20
epochs = 10
history = model.fit(X_train_orig_sm, Y_train_orig_sm, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.2)
print('Evaluating the test data on the model')

我如何保存神经网络的权重:

model.save_weights("dnn_model.h5")

我如何尝试加载神经网络的权重:

dnn_model=model.load_weights("dnn_model.h5")
dnn_model.layers[5]

尝试加载模型时,出现以下错误:

AttributeError: 'NoneType' object has no attribute 'layers'

我似乎不明白为什么即使在保存模型之前训练了预训练的神经网络,神经网络的层也无法识别。任何建议、解决方案或方向将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

当您调用 model.save_weights("dnn_model.h5") 时,您只会保存模型的“权重”。您不保存模型的实际结构。这就是您无法访问图层等的原因。

要保存实际模型,您可以调用下面的方法。

# save
model.save('dnn_model') # save as pb
model.save('dnn_model.h5') # save as HDF5

# load
dnn_model = tf.keras.models.load_model('dnn_model') # load as pb
dnn_model = tf.keras.models.load_model('dnn_model.h5') # load as HDF5

注意:您无需为名称添加扩展名即可保存为 pb。

来源:https://www.tensorflow.org/tutorials/keras/save_and_load