Deeplearning4j 禁用日志记录
Deeplearning4j Disable Logging
我有一个 java 项目的深度学习,它在 STDO 上产生大量记录器输出。我想禁用它,但我似乎不知道该怎么做。
我的 src/main/resources 文件夹中有一个 log4j.properties
文件,如下所示:
log4j.rootLogger=ERROR, Console
log4j.logger.play=WARN
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p ~ %m%n
log4j.appender.org.springframework=WARN
log4j.appender.org.nd4j=WARN
log4j.appender.org.canova=WARN
log4j.appender.org.datavec=WARN
log4j.appender.org.deeplearning4j=WARN
log4j.appender.opennlp.uima=OFF
log4j.appender.org.apache.uima=OFF
log4j.appender.org.cleartk=OFF
log4j.logger.org.springframework=WARN
log4j.logger.org.nd4j=WARN
log4j.logger.org.canova=WARN
log4j.logger.org.datavec=WARN
log4j.logger.org.deeplearning4j=WARN
log4j.logger.opennlp.uima.util=OFF
log4j.logger.org.apache.uima=OFF
log4j.logger.org.cleartk=OFF
log4j.logger.org.deeplearning4j.optimize.solvers.BaseOptimizer=OFF
slf4j.logger.org.deeplearning4j.optimize.solvers.BaseOptimizer=OFF
太多的具体输出是:
21:26:34.860 [main] DEBUG o.d.optimize.solvers.BaseOptimizer - Hit termination condition on iteration 0: score=1.2894165074915344E19, oldScore=1.2894191699433697E19, condition=org.deeplearning4j.optimize.terminations.EpsTermination@55f111f3
训练时每秒发生多次。
您提供的日志条目的输出看起来非常像 Logback 格式的 SLF4J 输出(不是 LOG4J 输出)。
deeplearning4j-core 建议 SLF4J 的依赖项也用于日志记录。
因此,您的 log4j.properties
对 deeplearning4j 日志记录没有影响。尝试将 logback.xml
配置也添加到资源中,并为根记录器切换到 WARN 或 ERROR 级别,请参阅 https://logback.qos.ch/manual/configuration.html
activate/deactivate 日志中的框架 DL4J (1.0.0-beta7) 中有一些属性。我找到了其中一些:
import org.nd4j.common.config.ND4JSystemProperties;
System.setProperty(ND4JSystemProperties.LOG_INITIALIZATION, "false");
System.setProperty(ND4JSystemProperties.ND4J_IGNORE_AVX, "true");
System.setProperty(ND4JSystemProperties.VERSION_CHECK_PROPERTY, "false");
请注意,这是一个非常规的解决方案。另一方面,有些消息是无法避免的:
MultiLayerNetwork.init()
在这个方法中你可以找到一个没有验证的 OneTimeLogger:
OneTimeLogger.info(log, "Starting MultiLayerNetwork with WorkspaceModes set to [training: {}; inference: {}], cacheMode set to [{}]",
layerWiseConfigurations.getTrainingWorkspaceMode(),
layerWiseConfigurations.getInferenceWorkspaceMode(),
layerWiseConfigurations.getCacheMode());
如果您找到更好的方法来禁用 DL4J 中的日志消息,请分享。在 DL4J 库之外还有一些其他方法。
我有一个 java 项目的深度学习,它在 STDO 上产生大量记录器输出。我想禁用它,但我似乎不知道该怎么做。
我的 src/main/resources 文件夹中有一个 log4j.properties
文件,如下所示:
log4j.rootLogger=ERROR, Console
log4j.logger.play=WARN
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p ~ %m%n
log4j.appender.org.springframework=WARN
log4j.appender.org.nd4j=WARN
log4j.appender.org.canova=WARN
log4j.appender.org.datavec=WARN
log4j.appender.org.deeplearning4j=WARN
log4j.appender.opennlp.uima=OFF
log4j.appender.org.apache.uima=OFF
log4j.appender.org.cleartk=OFF
log4j.logger.org.springframework=WARN
log4j.logger.org.nd4j=WARN
log4j.logger.org.canova=WARN
log4j.logger.org.datavec=WARN
log4j.logger.org.deeplearning4j=WARN
log4j.logger.opennlp.uima.util=OFF
log4j.logger.org.apache.uima=OFF
log4j.logger.org.cleartk=OFF
log4j.logger.org.deeplearning4j.optimize.solvers.BaseOptimizer=OFF
slf4j.logger.org.deeplearning4j.optimize.solvers.BaseOptimizer=OFF
太多的具体输出是:
21:26:34.860 [main] DEBUG o.d.optimize.solvers.BaseOptimizer - Hit termination condition on iteration 0: score=1.2894165074915344E19, oldScore=1.2894191699433697E19, condition=org.deeplearning4j.optimize.terminations.EpsTermination@55f111f3
训练时每秒发生多次。
您提供的日志条目的输出看起来非常像 Logback 格式的 SLF4J 输出(不是 LOG4J 输出)。
deeplearning4j-core 建议 SLF4J 的依赖项也用于日志记录。
因此,您的 log4j.properties
对 deeplearning4j 日志记录没有影响。尝试将 logback.xml
配置也添加到资源中,并为根记录器切换到 WARN 或 ERROR 级别,请参阅 https://logback.qos.ch/manual/configuration.html
activate/deactivate 日志中的框架 DL4J (1.0.0-beta7) 中有一些属性。我找到了其中一些:
import org.nd4j.common.config.ND4JSystemProperties;
System.setProperty(ND4JSystemProperties.LOG_INITIALIZATION, "false");
System.setProperty(ND4JSystemProperties.ND4J_IGNORE_AVX, "true");
System.setProperty(ND4JSystemProperties.VERSION_CHECK_PROPERTY, "false");
请注意,这是一个非常规的解决方案。另一方面,有些消息是无法避免的:
MultiLayerNetwork.init()
在这个方法中你可以找到一个没有验证的 OneTimeLogger:
OneTimeLogger.info(log, "Starting MultiLayerNetwork with WorkspaceModes set to [training: {}; inference: {}], cacheMode set to [{}]",
layerWiseConfigurations.getTrainingWorkspaceMode(),
layerWiseConfigurations.getInferenceWorkspaceMode(),
layerWiseConfigurations.getCacheMode());
如果您找到更好的方法来禁用 DL4J 中的日志消息,请分享。在 DL4J 库之外还有一些其他方法。