我正在使用来自两个不同来源的数据流训练神经网络,启发式:
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.vw
和 train2.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/