0

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

スタンドアロンの実行可能モードで、同じモデルの同じ dat ファイルを -daemon オプションなしで実行すると、最後に結果が表示されます。

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

ここでデーモンモードで何がうまくいかないのか考えていますか? -p /tmp/ オプションも使用してみました... sudoでデーモンモードを実行しましたが、何も役に立ちませんでした。正確に何が起こっているかを知るためのデバッグ ダンプ オプションや詳細オプション、またはその他の何かがありますか?

ありがとう

4

1 に答える 1

0

動作しない理由はvw、PHP クライアント コードにあるのではありません。

explode"\n" では、改行を取り除きます。

implodeglue-string パラメーターを指定しないと、glue-string のデフォルトが空の文字列になります。

結果: 改行が取り除かれます。すべての例は、1 つの大きな (そして最後に改行がないため不完全な) 例にマージされます。

vw例を区切るために改行が必要です。改行がないと、最初の例が完了するまで永遠に待機します。

したがって、コードの implode 行を次のように変更する必要があると思います。

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

それが機能するために。

また、最後の行を通過させるために追加の改行が必要になります。

于 2014-03-20T05:55:38.823 に答える