如何在 libsvm (java) 中禁用控制台输出
Posted
技术标签:
【中文标题】如何在 libsvm (java) 中禁用控制台输出【英文标题】:How to disable the console output in libsvm (java) 【发布时间】:2014-08-13 19:00:42 【问题描述】:我在 java 中使用 libsvm,并且遇到了与here for python 描述的类似问题。
我在训练和预测期间收到大量控制台输出,我想禁用它。可悲的是,由于“服务暂时不可用”,我无法访问可能被描述的网站 (here)。我找不到与 java 相关的方法来禁用此警告(如果我确实监督了某些事情,我深表歉意)
输出总是与此非常相似:
优化完成,#iter = 10000000 nu = 0.013178458659415372 obj = -11.005078334927212,rho = -2.1799731001804696 nSV = 20,nBSV = 5 总 nSV = 20
你知道如何在 java 中禁用这种输出吗?
非常感谢您的帮助。
【问题讨论】:
【参考方案1】:在命令行只需使用 -q 选项。
$ ./svm-train
Usage: svm-train [options] training_set_file [model_file]
options:
-s svm_type : set type of SVM (default 0)
*** lots of stuff cut out...
-q : quiet mode (no outputs)
如果您有自己的 java 培训师,请为您设置 print_func svm_print_null。 (我认为这样做的唯一方法是使用 svm_train 类是将“-q”和其他参数一起传递给 main 方法)。
希望对你有帮助
【讨论】:
【参考方案2】:要以编程方式禁用输出,您需要执行以下操作:
svm.svm_set_print_string_function(new libsvm.svm_print_interface()
@Override public void print(String s) // Disables svm output
);
【讨论】:
【参考方案3】:要禁用 Java 终端中的 libsvm 输出,我使用:
import java.io.PrintStream;
import java.io.OutputStream;
System.setOut(new PrintStream(new OutputStream()
@Override public void write(int b) throws IOException
));
请记住,终端的输出被禁用,但可以使用记录器来代替输出:
import org.apache.log4j.Logger;
private static final Logger LOG = Logger.getLogger(YourClass.class);
将 log4j.properties 文件放在资源文件夹中。
log4j.properties 文件可能如下所示:
#info,debug, error,fatal ...
log4j.rootLogger=debug,stdout
#console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
【讨论】:
以上是关于如何在 libsvm (java) 中禁用控制台输出的主要内容,如果未能解决你的问题,请参考以下文章