我在守护进程模式下运行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运行守护进程模式但没有任何帮助。是否有调试转储选项或详细选项或其他什么来知道究竟发生了什么?
感谢
答案 0 :(得分:0)
它不起作用的原因不在vw
,而在PHP客户端代码中。
explode
on" \ n",删除换行符。
implode
导致胶串默认为空字符串。
结果:删除换行符。 所有示例都合并为一个大(并且不完整,因为最后没有新行)示例。
vw
需要换行符来分隔示例,如果没有它们,它将永远等待第一个示例完成。
所以我认为您需要将内爆的代码行更改为:
$mlstr = implode("\n", $mldata);
让它发挥作用。
您还需要一个额外的结尾换行符才能获得最后一行。