我有一个类和子类的列表,由于仅在最后一层它们就达到了大约700个类,所以我认为最好分别训练每组类。 但是在我训练了它们并能够一起使用它们之后,我发现加载的模型越多,消耗的内存就越多。 据我所知,只有2种使用Keras的选项,一种是使用加载模型,另一种是仅加载模型权重。问题是,我发现RAM几乎没有变化,它们都使用相同数量的内存。 如何加载消耗更少内存的模型?
答案 0 :(得分:1)
内存消耗在很大程度上取决于模型的体系结构。
在不同的加载类型之间几乎没有区别,因为真正消耗内存的加载操作是重量加载,可能有数百万个浮点数。
load_model
实际上使您不必编写单独的代码来加载模型的体系结构(描述模型体系结构的json文件)。
因此,load_model ~ load_weights
的{{1}}操作等于load_model
。
您无法使用上述解决方案加载消耗更少内存的模型。
您可以做的是使用模型修剪/训练后量化,从而减少内存消耗。
答案 1 :(得分:0)
load_model方法将立即加载模型及其体系结构。在一行代码中,但这是内存消耗。另一方面,load_weights仅加载权重,而没有体系结构。因此,为了减少内存消耗,您可以每次使用体重时,从头开始创建模型,然后调用load_weights方法。