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

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' 不能多次指定错误”,而不是 --save_resume

最佳答案

你的推测是正确的。当在 --save_resume 的第一次训练中不使用 train1.vw 时,模型 /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

关于vowpalwabbit - vawpal wabbit 中的 `--save_resume` 选项究竟是做什么的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28141995/

10-14 02:52