继续进行一些实验here我感兴趣的是如何继续训练大众模型。
我首先跑了这个并保存了模型。
vw -d housing.vm --loss_function squared -f housing2.mod --invert_hash readable.housing2.mod
检查可读模型:
Version 7.7.0
Min label:0.000000
Max label:50.000000
bits:18
0 pairs:
0 triples:
rank:0
lda:0
0 ngram:
0 skip:
options:
:0
^AGE:104042:0.020412
^B:158346:0.007608
^CHAS:102153:1.014402
^CRIM:141890:0.016158
^DIS:182658:0.278865
^INDUS:125597:0.062041
^LSTAT:170288:0.028373
^NOX:165794:2.872270
^PTRATIO:223085:0.108966
^RAD:232476:0.074916
^RM:2580:0.330865
^TAX:108300:0.002732
^ZN:54950:0.020350
Constant:116060:2.728616
如果我继续使用另外两个例子(在housing_2.vm中)继续训练模型,那么注意,ZN和CHAS的值为零:
27.50 | CRIM:0.14866 ZN:0.00 INDUS:8.560 CHAS:0 NOX:0.5200 RM:6.7270 AGE:79.90 DIS:2.7778 RAD:5 TAX:384.0 PTRATIO:20.90 B:394.76 LSTAT:9.42
26.50 | CRIM:0.11432 ZN:0.00 INDUS:8.560 CHAS:0 NOX:0.5200 RM:6.7810 AGE:71.30 DIS:2.8561 RAD:5 TAX:384.0 PTRATIO:20.90 B:395.58 LSTAT:7.67
如果加载了保存的模型并且继续训练,则系数似乎从这些零值特征中丢失。我做错了什么或这是一个错误?
vw -d housing_2.vm --loss_function squared -i housing2.mod --invert_hash readable.housing3.mod
输出来自readable.housing3.mod:
Version 7.7.0
Min label:0.000000
Max label:50.000000
bits:18
0 pairs:
0 triples:
rank:0
lda:0
0 ngram:
0 skip:
options:
:0
^AGE:104042:0.023086
^B:158346:0.008148
^CRIM:141890:1.400201
^DIS:182658:0.348675
^INDUS:125597:0.087712
^LSTAT:170288:0.050539
^NOX:165794:3.294814
^PTRATIO:223085:0.119479
^RAD:232476:0.118868
^RM:2580:0.360698
^TAX:108300:0.003304
Constant:116060:2.948345
答案 0 :(得分:2)
如果您想以平稳的方式从已保存状态继续学习,则必须使用--save_resume
选项。
有3种根本不同类型的“状态”可以保存到vw
“模型”文件中:
vw
的版本(以确保版本之间并不总是保留的二进制兼容性),向量中的位数(-b
)和模型类型仅--save_resume
保存最后一组。
- save_resume不是默认值,因为它有开销,在大多数用例中它不需要。例如如果你保存模型一次以进行许多预测而没有学习(-t
),则无需保存第三个状态子集。
因此,我相信您的具体情况,您希望使用--save_resume
。
始终存在错误的可能性,特别是因为vw
支持如此多的选项(最后计数约为100),这些选项通常是相互依赖的。有些选项组合有意义,有些则没有。对大约2 ^ 100个可能的选项组合进行健全性检查有点不切实际。如果您发现了错误,请在github上打开一个问题。在这种情况下,请确保使用完整的示例(完整数据和命令行),以便重现您的问题。
更新2014-09-20(在github上打开问题后,谢谢!):
0值特征“消失”(不是真的来自模型,但只来自--invert_hash
输出)的原因是1)--invert_hash
从未设计用于多次传递,因为保留原始特征名称哈希表会产生很大的性能开销2)缺少的功能是零值的功能,这些功能将被丢弃。模型本身应该仍然具有任何先前传递非零权重的任何特征。由于实现原因,修复这种不一致性太复杂且成本太高,并且会违背使vw
更快的最重要动机,特别是对于最有用/常见的用例。无论如何,感谢报告,我也从中学到了新东西。