【问题标题】:How to save full Vowpal Wabbit python model (pyvw)?如何保存完整的 Vowpal Wabbit python 模型(pyvw)?
【发布时间】:2020-04-23 01:28:18
【问题描述】:

我尝试使用 model.save(<filepath>) 保存 Vowpal Wabbit 模型。但是当我重新加载模型时(使用-i <filepath> 标志),模型超参数如power_t 和initial_t 不一样(它们被重新初始化)。保存的文件在我看来也比它应该的小一点(不确定它是否被压缩)。

这是反直觉的:为什么.save() 方法不保存完整的模型?是否有其他保存方法来保存 FULL 模型?

【问题讨论】:

    标签: save vowpalwabbit


    【解决方案1】:

    power_t 和 initial_t 仅与训练相关。当只是做预测时,它们是不需要的。默认情况下,当保存模型时,大众假定它仅在加载时用于预测。如果您打算从加载的模型继续训练,那么当您初始化 VW 时,您需要指定 --save_resume 以便将额外的状态存储在模型中。这包括power_t 和initial_t(保存到不同的变量 t 中)。

    【讨论】:

    • 谢谢。这使我能够从已保存的模型中继续训练(使用 model.save(<filepath>) 和非零 power_t 以及 adaptive、normalized 和 invariant 标志集保存。但是,当我将 --passes x 设置为 x > 1,它会产生不同的结果(学习不同的权重)
    • 当说它学习不同的权重时,你的意思是与不添加--passes相比吗?这是预期的,因为使用了多次传递,这意味着数据正在被多次训练。对数据进行多次传递肯定会导致学习不同的权重。
    • 对不起,我不是这个意思。我正在运行以下测试:我用--passes 3 --save_resume 实例化一个 VW 模型。我训练模型。然后我使用--i <filepath> --save_resume --passes 3 在同一个会话中保存并加载模型(我现在应该有两个相同的模型)。我在另一个数据集(不同于第一个训练数据集)上进一步训练两个模型。在这一点上,我希望两个模型在测试集上产生相同的预测,但事实并非如此。但是,如果我在没有 --passes 的情况下运行此测试,它们确实会产生相同的预测。
    • 说实话,我什至不确定 passes 的概念在 pyvw 中的真正含义,因为我在 for 循环中逐个样本地训练模型样本。我刚刚问过这个here。
    • 是的,所以取决于您调用事物的方式,传递可能会或可能不会影响 pyvw 中的事物。这是以这种方式棘手的参数之一。我认为在这种情况下预测应该是相同的。您能否为您正在运行的脚本和您正在使用的数据创建一个问题,我可以进一步研究它吗?
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2021-08-27
    • 2016-02-21
    • 2015-03-29
    • 2015-11-16
    • 2015-06-20
    • 2016-08-22
    • 2014-08-29
    相关资源
    最近更新 更多