【发布时间】:2019-12-27 07:09:58
【问题描述】:
我有一个类和子类的列表,由于仅在最后一层就有大约 700 个类,我认为最好分别训练每组类。 但是在我训练它们并能够一起使用它们之后,我发现我加载的模型越多,它就越会消耗内存。 据我所知,使用 Keras 只有两种选择,一种是使用加载模型,另一种是仅加载模型权重。问题是我看到内存几乎没有变化,两者都使用相同数量的内存。 如何加载占用内存少的模型?
【问题讨论】:
标签: tensorflow keras
我有一个类和子类的列表,由于仅在最后一层就有大约 700 个类,我认为最好分别训练每组类。 但是在我训练它们并能够一起使用它们之后,我发现我加载的模型越多,它就越会消耗内存。 据我所知,使用 Keras 只有两种选择,一种是使用加载模型,另一种是仅加载模型权重。问题是我看到内存几乎没有变化,两者都使用相同数量的内存。 如何加载占用内存少的模型?
【问题讨论】:
标签: tensorflow keras
内存消耗在很大程度上取决于模型的架构。
不同的加载类型几乎没有区别,因为真正消耗内存的加载操作是权重加载,可能有数百万个浮点数。
load_model 实际上使您无需编写单独的代码来加载模型的架构(一个描述模型架构的 json 文件)。
因此,load_model ~ load_weights,其中load_model 操作等于load_weights + load_json_architecture。
您无法使用上述解决方案加载消耗较少内存的模型。
你可以做的是使用模型剪枝/训练后量化,从而减少内存消耗。
【讨论】:
load_model 方法将立即加载模型及其架构。在一行代码中,却是内存消耗。另一方面 load_weights 只加载没有架构的权重。因此,要在每次使用权重时消耗更少的内存,请从头开始创建模型,然后调用 load_weights 方法。
【讨论】: