在keras中保存模型还是只保存权重更好?

时间:2019-12-27 07:09:58

标签: tensorflow keras

我有一个类和子类的列表,由于仅在最后一层它们就达到了大约700个类,所以我认为最好分别训练每组类。  但是在我训练了它们并能够一起使用它们之后,我发现加载的模型越多,消耗的内存就越多。  据我所知,只有2种使用Keras的选项,一种是使用加载模型,另一种是仅加载模型权重。问题是,我发现RAM几乎没有变化,它们都使用相同数量的内存。  如何加载消耗更少内存的模型?

2 个答案:

答案 0 :(得分:1)

内存消耗在很大程度上取决于模型的体系结构。

在不同的加载类型之间几乎没有区别,因为真正消耗内存的加载操作是重量加载,可能有数百万个浮点数。

load_model实际上使您不必编写单独的代码来加载模型的体系结构(描述模型体系结构的json文件)。

因此,load_model ~ load_weights的{​​{1}}操作等于load_model

您无法使用上述解决方案加载消耗更少内存的模型。

您可以做的是使用模型修剪/训练后量化,从而减少内存消耗。

答案 1 :(得分:0)

load_model方法将立即加载模型及其体系结构。在一行代码中,但这是内存消耗。另一方面,load_weights仅加载权重,而没有体系结构。因此,为了减少内存消耗,您可以每次使用体重时,从头开始创建模型,然后调用load_weights方法。