2

在这里继续进行一些实验,我感兴趣的是看看如何继续训练大众模型。

我首先运行它并保存了模型。

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
4

1 回答 1

2

如果您想以流畅的方式继续从保存的状态中学习,您必须使用该--save_resume选项。

有 3 种根本不同类型的“状态”可以保存到vw“模型”文件中:

  1. 权重向量(回归量)很明显。这就是模型本身。
  2. 不变的参数,如版本vw(以确保版本之间并不总是保留的二进制兼容性)、向量中的位数 ( -b) 和模型类型
  3. 在学习过程中动态变化的状态。该子集包括学习和衰减率等参数,这些参数在每个示例的学习过程中逐渐变化,示例编号本身等。

--save_resume保存最后一组。

--save_resume 不是默认值,因为它有开销,并且在大多数用例中不需要它。例如,如果您保存一个模型以进行多次预测而不进行学习 ( -t),则无需保存状态的第三个子集。

所以,我相信在你的特殊情况下,你想使用--save_resume.

总是存在错误的可能性,特别是因为vw支持如此多的选项(最后计数大约 100 个),这些选项通常是相互依赖的。一些选项组合有意义,而另一些则没有。对大约 2^100 个可能的选项组合进行完整性检查有点不切实际。如果您发现错误,请在 github 上打开一个问题。在这种情况下,请确保使用完整的示例(完整数据和命令行),以便重现您的问题。

2014-09-20 更新(在 github 上打开问题后,谢谢!): 0 值特征“消失”的原因(不是真正从模型中,而只是从--invert_hash输出中)是 1)--invert_hash从未设计用于多个通过,因为将原始特征名称保留在哈希表中,会产生很大的性能开销 2) 缺失的特征是那些具有零值的特征,它们将被丢弃。模型本身仍应具有任何先前通过的非零权重的特征。由于实施原因,修复这种不一致过于复杂且成本高昂,并且会违背vw快速制作的首要动机,尤其是对于最有用/最常见的用例。不管怎样,谢谢你的报告,我也从中学到了一些新东西。

于 2014-09-16T20:54:10.593 回答