【问题标题】:why does pickle file of fbprophet model need so much memory on hard drive?为什么 fbprophet 模型的 pickle 文件在硬盘上需要这么多内存?
【发布时间】:2020-06-22 07:19:37
【问题描述】:

我用airpassengers data 创建了一个简单的 fbprophet 模型:

我用航空乘客数据创建了一个简单的 fbprophet 模型:

import pandas as pd
import pickle
from fbprophet import Prophet
import sys

df = pd.read_csv("airline-passengers.csv")

# preprocess columns as fbprophet expects it
df.rename(columns={"Month": "ds", "Passengers": "y"}, inplace=True)
df["ds"] = pd.to_datetime(df["ds"])

m = Prophet()
m.fit(df)

但是,当我保存对象m

with open("p_model", "wb") as f:
    pickle.dump(m, f)

我的硬盘驱动器上需要 >1 MB 的内存。对象m 本身似乎很小,因为sys.getsizeof(m) 返回56

为什么pickle文件这么大?是否有合适的替代方法来保存对象以供以后重用?提前致谢。

【问题讨论】:

    标签: python pandas pickle facebook-prophet


    【解决方案1】:

    我认为它也会腌制训练数据,所以尽量不要保存 model.history 应该没问题。

    这是很好的讨论:https://github.com/facebook/prophet/issues/1159

    【讨论】:

    • history 属性设置为0(不是None,如您的链接中所建议的)并没有解决问题。 pickle 文件在硬盘驱动器上仍然需要 >1 MB(尽管少一点)。另外我应该注意到,训练数据只需要大约 3 KB 的硬盘内存。
    • 您是否尝试过保存除 model.history 之外的所有内容?
    • 我做到了。 stan_backend 属性导致文件过大
    【解决方案2】:

    感谢@Kohelet的链接,我找到了解决方案,它是stan_backend属性:

    m.stan_backend = None
    

    这将硬盘驱动器上的文件大小减少到 18 KB 左右。

    我仍然想知道为什么在调用 sys.sizeof(m) 时不可见

    【讨论】:

      猜你喜欢
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2016-06-15
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多