【问题标题】:Vowpal Wabbit execute without writing to diskVowpal Wabbit 在不写入磁盘的情况下执行
【发布时间】:2014-12-16 23:18:24
【问题描述】:

我写了一个java代码来执行Vowpal Wabbit,方式如下:

 System.out.println("Executing command " + command);
        final Runtime r = Runtime.getRuntime();
        final Process p = r.exec(command);
        System.out.println("waiting for the process");
        try (final BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
            String line;

            while ((line = b.readLine()) != null) {
                final T lineResult = textParser.parseLine(line);
                parserResultCombiner.addToCombiner(lineResult);
            }
        }
        p.waitFor();
        System.out.println("done");
}

命令在哪里

vw -d input.txt --loss_function=logistic -f model.vw

这样做的缺点是它需要写入磁盘。经过一番搜索,我了解到 vowpal wabbit 支持从标准输入读取数据 example in R

我在 Java 1.8 中找不到任何示例来完成此操作。谁能和我分享一个?

【问题讨论】:

  • 看看here,它展示了如何通过Java 与外部程序的标准输入和标准输出进行交互。那个帖子还指向this question,也值得一读。
  • 由于您的代码已经从外部进程的标准输出中读取,因此弄清楚如何写入其标准输入应该不难。只需使用p.getOutputStream() 而不是p.getInputStream() 并写信给它...

标签: java java-8 vowpalwabbit


【解决方案1】:

您需要在守护程序模式下启动 vw。这将启动一个侦听指定端口的进程。

$ vw -i model.vw  -t --daemon --quiet --port 26542

守护程序启动后,您可以发送样本以使用套接字调用进行预测

$ echo " abc-example| a b c" | netcat localhost 26542
0.000000 abc-example

$ echo " xyz-example| x y z" | netcat localhost 26542
1.000000 xyz-example

来源: https://github.com/JohnLangford/vowpal_wabbit/wiki/daemon-example

最近他们推出了一个使用 jni 与 vw 交互的 java 版本的代码 https://github.com/JohnLangford/vowpal_wabbit/tree/master/java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多