3

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

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.

4

2 回答 2

4

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

报告为平均损失的不同数字的另一个原因是,当不使用 时--save_resume,VW 仅计算给定数据(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

请参阅相关已解决的 GitHub 问题

于 2015-01-26T10:08:46.557 回答
1

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

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

于 2015-03-10T15:05:33.297 回答