从Vowpal Wabbit守护进程模式获得结果

时间:2014-03-20 05:12:50

标签: php machine-learning vowpalwabbit

我在守护进程模式下运行VW。作为一个独立的可执行文件,它运行得非常好。在守护进程模式中,我最初看到的是关于预测和选项的内容,但不是最终结果。不确定到底发生了什么。

这就是我打电话给VW6的方式

/bin64/vw --daemon --num_children 2 -t -i ~/modelbow.vw6 --min_prediction 0 --max_prediction 1 -p stdout  2>&1 

我检查vw6运行正常。我使用简单的PHP脚本发送数据(为简洁起见,删除了调试行):

     $fp = fsockopen("localhost",26542, $errno, $errstr, 3);
     $fp_dat = fopen("/tmp/ml.dat", "r");

     $mldata = explode("\n", file_get_contents("/tmp/ml.dat"));

     $mlstr = implode($mldata);

     fwrite($fp, $mlstr);

     $result = trim(fgets($fp, 1024));
     print $result;

打印$ result以上不打印任何内容。我在stdout中唯一看到的是

num sources = 1
Num weight bits = 28
learning rate = 10
initial_t = 1
power_t = 0.5
decay_learning_rate = 1
predictions = stdout
only testing
average    since       example  example    current  current  current
loss       last        counter   weight      label  predict features

在独立的可执行模式下,如果我在没有-daemon选项的情况下使用相同模型的同一个dat文件运行,那么它很乐意在最后给出结果

...
...
predictions = stdout
only testing
average    since       example  example    current  current  current
loss       last        counter   weight      label  predict features
1.000000 ba66dfc7a135e2728d08010b40586b90

知道守护进程模式可能出现什么问题吗?我尝试使用-p / tmp / option ...用sudo运行守护进程模式但没有任何帮助。是否有调试转储选项或详细选项或其他什么来知道究竟发生了什么?

感谢

1 个答案:

答案 0 :(得分:0)

它不起作用的原因不在vw,而在PHP客户端代码中。

explode on" \ n",删除换行符。

没有glue-string参数的

implode导致胶串默认为空字符串。

结果:删除换行符。 所有示例都合并为一个大(并且不完整,因为最后没有新行)示例。

vw需要换行符来分隔示例,如果没有它们,它将永远等待第一个示例完成。

所以我认为您需要将内爆的代码行更改为:

  

$mlstr = implode("\n", $mldata);

让它发挥作用。

您还需要一个额外的结尾换行符才能获得最后一行。