这两种节省keras机器学习模型权重的方法有什么区别?

use*_*789 5 python machine-learning neural-network keras

我看到了两种减轻keras模型权重的方法。

第一种方式;

checkpointer = ModelCheckpoint(filepath="weights.hdf5", verbose=1, save_best_only=True)
model.fit(x_train, y_train,
                    nb_epoch=number_of_epoch,
                    batch_size=128,
                    verbose=1,
                    validation_data=(x_test, y_test),
                    callbacks=[reduce_lr, checkpointer],
                    shuffle=True)
Run Code Online (Sandbox Code Playgroud)

第二种方式

model.save_weights("model_weights.h5")
Run Code Online (Sandbox Code Playgroud)

两种方式有什么区别?加载weights.hdf5和加载之间的预测性能model_weights.h5有何不同?

zim*_*rol 11

不,在性能方面没有区别。这只是如何保存模型以及何时保存模型的两种不同方式。model.save_weights每当需要保存模型时(例如在训练或训练的一部分完成之后),使用require都要特别调用此函数。ModelCheckpoint如果您仍在开发模型,则使用起来会更加方便。使用这种方法,keras可以在每个训练时期之后保存模型的检查点,以便您可以还原不同的模型;或者您可以进行设置,save_best_only=True以便keras 仅在性能提高后才覆盖最新的检查点,从而以性能最佳的模型结束。

概括起来:这只是做两种不同事情的两种不同方式。这取决于您的用例和需求,什么才是最好的。

  • 感谢您的回答。已投票。我认为有一个关键的区别。结合使用带有“ save_best_only = True”的“ ModelCheckpoint”,可以确保保存最佳权重。无法保证其他方法。因此,`save_best_only = True`总是更好。我想不出任何其他原因不要一直使用它。 (2认同)
  • @FloridaMan一样。只是不同的文件扩展名,否则文件将是相同的。* .h5和* .hdf5是同义词文件扩展名。 (2认同)

bit*_*ang 6

HDF5(.h5、.hdf5)

从根本上解释了这里的参考.wolfram.com/language/ref /format/HDF5.html

HDF是分层数据格式的缩写。HDF5是 HDF 版本 5。

Import["file.h5"] 
Run Code Online (Sandbox Code Playgroud)

导入 HDF5 文件,返回文件中存储的数据集的名称。

在 Keras 文档中;正如您在这里看到的keras.io/api/models/model_ saving_apis/

model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'
Run Code Online (Sandbox Code Playgroud)

在 Tensorflow 文档中;正如你可以在这里看到的:tensorflow.org/tutorials/keras/save_and_load

# Save the entire model to a HDF5 file.
# The '.h5' extension indicates that the model should be saved to HDF5.
model.save('my_model.h5')
Run Code Online (Sandbox Code Playgroud)

从根本上讲,它们是同一件事。他们无法创造任何差异。