【问题标题】:what exactly does the `--save_resume` option in vowpal wabbit dovowpal wabbit 中的 `--save_resume` 选项到底有什么作用
【发布时间】:2015-03-24 09:16:22
【问题描述】:

我正在用来自两个不同来源的数据流训练一个神经网络,启发式地:

cat train1.vw |vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
cat train2.vw |vw --oaa 10 --nn 20 --save_resume -i /tmp/weights -f /tmp/weights

但是,这会引发一个错误,即“--oaa 不能多次传递”。很好,--save_resume 保留了配置参数,所以我修改了:

cat train1.vw |vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
cat train2.vw |vw --save_resume -i /tmp/weights -f /tmp/weights

一切正常。出于好奇,我重复了没有--save_resume 选项的第二种方法,一切仍然正常工作,只是模型性能稍差。

我推测--save_resume 保存了权重文件中的学习率和示例数。这似乎是从输出中发生的事情,并证实了更好的性能。还有什么吗?

编辑:经过一些实验,我发现通过-i 传递初始回归量是引发“选项'--oaa' 不能指定多次错误”而不是@987654327 @。

【问题讨论】:

    标签: vowpalwabbit


    【解决方案1】:

    你的猜测是正确的。在train1.vw上第一次训练不使用--save_resume时,模型/tmp/weights不包含学习率和其他状态信息(例如--adaptive在VW中默认使用,所以每个特征都有一个学习率)。这可能会影响最终模型的质量,通常会使其变得更糟。

    报告为平均损失的数字不同的另一个原因是,当不使用--save_resume 时,大众仅计算给定数据的平均值(train1.vwtrain2.vw)。

    --save_resume 的想法是在分两步训练时应该得到相同的最终平均损失

    cat train1.vw | vw --oaa 10 --nn 20 --save_resume -f /tmp/weights
    cat train2.vw | vw --save_resume -i /tmp/weights -f /tmp/weights
    

    在一步训练时

    cat train1.vw train2.vw | vw --oaa 10 --nn 20 -f /tmp/weights
    

    查看related solved GitHub issue

    【讨论】:

    • +1 获取 GitHub 上问题的链接。我完全同意您对 --save_resume 在训练与测试模式下的“预期行为”的期望。
    【解决方案2】:

    看起来最近这里引入了一个错误,我为它记录了一张票: https://github.com/JohnLangford/vowpal_wabbit/issues/554

    更新:他们已经在 master 中修复了它。所以一定要拉。

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 1970-01-01
      • 2015-03-29
      • 2017-10-09
      • 2018-01-20
      • 1970-01-01
      • 2013-12-15
      • 2020-11-11
      • 2017-08-23
      相关资源
      最近更新 更多