Mat*_*sek 5 python logging keras tensorflow
我正在使用 Tensorflow 和 Keras。我有一个 python 脚本来启动预测过程,我需要在子进程中启动它,所以我这样做:
from subprocess import Popen, PIPE, TimeoutExpired
process = Popen(['python', 'start_prediction.py'], stdout=PIPE, stderr=PIPE)
try:
output, errors = process.communicate(timeout=60)
except TimeoutExpired:
process.kill()
output, errors = process.communicate()
Run Code Online (Sandbox Code Playgroud)
我为我的应用程序配置了一个记录器,它工作正常,但是 Tensorflow 使用了一个记录器,这就是我遇到的问题。
我的记录器配置为使用 StreamHandlersys.stdout和 FileHandler。当我打印出来时output,errors我的所有日志消息都存储在 中output,其中没有任何内容errors。这就是我想要的。
另一方面,Tensorflow 使用的记录器无法按照我的需要工作。一些消息正在被记录到output(如预测过程和一些警告),其中一些消息正在被记录到流中errors(其他警告)。我无法判断应用程序是否失败,因为即使它工作并完成且没有任何错误,我仍然会在流中收到消息errors。
我尝试将所有消息从 Tensorflow 重定向到sys.stdout执行此操作:
from absl import logging
logging._warn_preinit_stderr = 0
Run Code Online (Sandbox Code Playgroud)
然后
import logging
import sys
from tensorflow.python.platform import tf_logging
tf_logging.get_logger().handlers = [logging.StreamHandler(sys.stdout)]
Run Code Online (Sandbox Code Playgroud)
但这没有帮助(logging导入位于不同的文件中,这是一个简化版本)。事实上,这并没有什么区别,至少我没有看到任何区别。
从理论上讲,我只收到警告,因此我可以抑制所有警告消息并仅保留错误,但我宁愿不这样做。一定有更好的方法来处理它。
有没有办法将所有 Tensorflow 输出重定向到sys.stdout流?或者也许还有另一种方法可以在输出中不包含任何非错误消息errors?
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |