保存用于恢复和再训练的超参数的好做法是什么
What is a good practive to save hyperparamters for restoring and retraining
我刚刚遇到一个问题,我有一个很好的模型但忘记了我使用的超参数。我只有元数据、索引和数据文件。我搜索了超参数是否保存在这些文件中。但似乎并非如此。那么将超参数与检查点文件一起保存的最佳方法是什么,这样我就可以随时使用相同的参数重新训练?
- 最简单的解决方案 是将它们作为 shorthand 符号传递给文件名,例如将文件命名为:
Inceptionv4_bs64_lr0.001_Adam
如果这会使文件名太长,或者如果您已经有了想要保留的命名约定,只需保存一个与其他文件同名但扩展名不同的文本文件,例如.hyperparams
,其中包含超参数的信息。
- 要直接保存到检查点或模型文件,您可以定义一个
tf.constant
:
learning_rate = tf.constant(0.001)
这些将保存在图形定义中,因此如果您重新加载模型或检查点文件可以恢复。
如果您想要更复杂的东西,tensorflow 2.0 已将 HParams Class 升级为完整的 API。这有点代码量,但是提供了一个教程笔记本here。功能包括测试超参数范围、将超参数写入文件和张量板可视化。
或者,还有这些外部平台提供与3.
类似的功能,更成熟,也可以使用tensorflow:
我倾向于使用当前日期作为模型名称,并自动生成一个 csv 文件,如:
date, path_to_model, hyper_param1, hyper_param2, ..., test acc, val acc, train acc, loss
这样我就可以轻松地加载我之前在新数据集上训练过的任何模型,只需使用日期。这个结构对我来说非常好用,并且允许过滤并且易于阅读
我刚刚遇到一个问题,我有一个很好的模型但忘记了我使用的超参数。我只有元数据、索引和数据文件。我搜索了超参数是否保存在这些文件中。但似乎并非如此。那么将超参数与检查点文件一起保存的最佳方法是什么,这样我就可以随时使用相同的参数重新训练?
- 最简单的解决方案 是将它们作为 shorthand 符号传递给文件名,例如将文件命名为:
Inceptionv4_bs64_lr0.001_Adam
如果这会使文件名太长,或者如果您已经有了想要保留的命名约定,只需保存一个与其他文件同名但扩展名不同的文本文件,例如.hyperparams
,其中包含超参数的信息。
- 要直接保存到检查点或模型文件,您可以定义一个
tf.constant
:
learning_rate = tf.constant(0.001)
这些将保存在图形定义中,因此如果您重新加载模型或检查点文件可以恢复。
如果您想要更复杂的东西,tensorflow 2.0 已将 HParams Class 升级为完整的 API。这有点代码量,但是提供了一个教程笔记本here。功能包括测试超参数范围、将超参数写入文件和张量板可视化。
或者,还有这些外部平台提供与
3.
类似的功能,更成熟,也可以使用tensorflow:
我倾向于使用当前日期作为模型名称,并自动生成一个 csv 文件,如:
date, path_to_model, hyper_param1, hyper_param2, ..., test acc, val acc, train acc, loss
这样我就可以轻松地加载我之前在新数据集上训练过的任何模型,只需使用日期。这个结构对我来说非常好用,并且允许过滤并且易于阅读