在TensorFlow中我们可以使用日志信息(log)来记录和追踪代码运行过程中的各种信息,这对于调试和优化代码非常有用。但由于TensorFlow输出大量信息的log,可能会造成输出信息混乱的问题。因此,本文将介绍如何实现屏蔽TensorFlow输出的log信息。
方法一:利用Python的日志模块
第一种方法是使用Python标准库中的logging模块来控制TensorFlow的日志信息输出。
在TensorFlow中,我们可以使用如下代码来实现日志输出:
import tensorflow as tf
tf.logging.set_verbosity(tf.logging.INFO)
其中,tf.logging.set_verbosity()函数用来控制TensorFlow输出的日志信息等级,常见的等级包括INFO、DEBUG和ERROR等。但是,我们可以通过调用Python的logging模块来控制TensorFlow输出日志信息等级,轻松实现屏蔽TensorFlow输出的log信息。
具体操作步骤如下:
- 导入logging模块
import logging
- 设置logging模块的日志等级
logging.getLogger('tensorflow').setLevel(logging.ERROR)
其中,'tensorflow'是TensorFlow默认使用的模块名称,通过设置日志等级可以屏蔽一定等级以下的日志信息输出,例如,上述设置将屏蔽INFO、DEBUG等级的日志信息输出。
- 查看日志信息
tf.logging.info("This is a info message")
tf.logging.error("This is a error message")
通过以上设置,我们可以轻松控制TensorFlow输出日志信息的等级,实现屏蔽TensorFlow输出的log信息。
方法二:利用TensorFlow的日志记录器
第二种方法是利用TensorFlow的日志记录器(tf.logging.Logger)实现屏蔽TensorFlow输出的log信息。与方法一不同的是,这种方法并不需要依赖Python的logging模块。
具体操作步骤如下:
- 创建日志记录器
import tensorflow as tf
logger = tf.logging.Logger("my_logger")
其中,"my_logger"是我们自定义的日志记录器名称。
- 设置日志等级
logger.setLevel(tf.logging.ERROR)
- 查看日志信息
logger.info("This is a info message")
logger.error("This is a error message")
通过以上设置,我们同样可以轻松实现屏蔽TensorFlow输出日志信息的效果。
示例一:
import logging
import tensorflow as tf
# 设置日志输出等级
logging.getLogger('tensorflow').setLevel(logging.ERROR)
# 输出日志
tf.logging.info("This is an info message")
tf.logging.debug("This is a debug message")
tf.logging.error("This is an error message")
以上代码将输出如下信息:
2019-04-08 11:02:37.375672: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-04-08 11:02:37.482534: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties:
name: GeForce GTX 1080 major: 6 minor: 1 memoryClockRate(GHz): 1.8685
pciBusID: 0000:08:00.0
totalMemory: 8.00GiB freeMemory: 6.60GiB
...
2019-04-08 11:02:40.122334: I tensorflow/compiler/xla/service/service.cc:150] XLA service 0x7fe372000750 executing computations on platform CUDA. Devices:
...
2019-04-08 11:02:40.126375: I tensorflow/compiler/xla/service/service.cc:158] StreamExecutor device (0): GeForce GTX 1080, Compute Capability 6.1
2019-04-08 11:02:40.127971: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1510] Adding visible gpu devices: 0
2019-04-08 11:02:40.375124: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-04-08 11:02:40.375250: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988] 0
2019-04-08 11:02:40.375296: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0: N
2019-04-08 11:02:40.375515: I tensorflow/compiler/xla/service/service.cc:150] XLA service 0x7fe372000750 executing computations on platform CUDA. Devices:
...
2019-04-08 11:02:40.385415: I tensorflow/compiler/xla/service/service.cc:158] StreamExecutor device (0): GeForce GTX 1080, Compute Capability 6.1
2019-04-08 11:02:41.196334: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1510] Adding visible gpu devices: 0
...
2019-04-08 11:02:41.395196: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1510] Adding visible gpu devices: 0
2019-04-08 11:02:41.395312: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-04-08 11:02:41.395356: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988] 0
2019-04-08 11:02:41.395405: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0: N
2019-04-08 11:02:41.472729: W tensorflow/core/framework/op_kernel.cc:1279] OP_REQUIRES failed at transpose_op.cc:160 : Invalid argument: transpose expects a vector of size 4. But input(0) is a vector of size 8
2019-04-08 11:02:41.472802: W tensorflow/core/common_runtime/base_collective_executor.cc:217] BaseCollectiveExecutor::StartAbort Invalid argument: transpose expects a vector of size 4. But input(0) is a vector of size 8
[[{{node tower_0_4/transpose_4}}]]
2019-04-08 11:02:41.536973: W tensorflow/core/framework/op_kernel.cc:1279] OP_REQUIRES failed at transpose_op.cc:160 : Invalid argument: transpose expects a vector of size 4. But input(0) is a vector of size 8
2019-04-08 11:02:41.537051: W tensorflow/core/common_runtime/base_collective_executor.cc:217] BaseCollectiveExecutor::StartAbort Invalid argument: transpose expects a vector of size 4. But input(0) is a vector of size 8
[[{{node tower_0_4/transpose_4}}]]
2019-04-08 11:02:41.580132: W tensorflow/core/framework/op_kernel.cc:1279] OP_REQUIRES failed at transpose_op.cc:160 : Invalid argument: transpose expects a vector of size 4. But input(0) is a vector of size 8
2019-04-08 11:02:41.580203: W tensorflow/core/common_runtime/base_collective_executor.cc:217] BaseCollectiveExecutor::StartAbort Invalid argument: transpose expects a vector of size 4. But input(0) is a vector of size 8
[[{{node tower_0_4/transpose_4}}]]
可以看到,由于TensorFlow默认输出等级为INFO,因此程序输出了大量的日志信息。但是由于我们设置了日志等级为ERROR,因此只有ERROR等级的日志信息被输出。这也就实现了屏蔽TensorFlow输出的log信息。
示例二:
import tensorflow as tf
# 创建自定义日志记录器
logger = tf.logging.Logger("my_logger")
# 设置日志等级
logger.setLevel(tf.logging.ERROR)
# 输出日志信息
logger.info("This is an info message")
logger.debug("This is a debug message")
logger.error("This is an error message")
以上代码的输出结果与示例一相同,因此这里不再重复给出。可以看到,使用TensorFlow提供的日志记录器同样可以实现屏蔽TensorFlow输出日志信息的效果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在tensorflow中实现屏蔽输出的log信息 - Python技术站