目录
环境说明
python3.6
用到了tensorXboard 对应 tensorflow版本是2.2.0
pytorch版本1.7
python3.6 系统自带logging
问题描述
日志上有重复内容输出
问题排查
这个问题以前从来没有发现,是在改了一个版本的代码后出现的。
我在网上搜索了一下别人都是说是logger设置的问题,但是这个Logger的文件,我是用了其他人的,而且以前从来没有出现过这种问题
分享下我的Logger文件
# encoding: utf-8
"""
@author: sherlock
@contact: sherlockliao01@gmail.com
"""
import logging
import os
import sys
def setup_logger(name, save_dir, distributed_rank=0):
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
# don't log results for the non-master process
if distributed_rank > 0:
return logger
ch = logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s")
ch.setFormatter(formatter)
logger.addHandler(ch)
if save_dir:
if not os.path.exists(save_dir):
os.makedirs(save_dir)
fh = logging.FileHandler(os.path.join(save_dir, name+".log"), encoding='utf-8', mode='a')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
所以我的思路放在了,是否因为新加的日志内容有误,导致重复打印,排查了一圈也没有这个问题。
最后解决思路,将自己新增的代码一行一行注释掉,排查到底是哪一行代码出现的问题。
问题发现
使用了终极大招,排除注释大法后,问题发现了。
问题就出在下面两行代码里面
writer.add_scalar('Learning Rate', get_learning_rate(optimizer), global_step=(epoch + 1))
logger.info(
"Epoch [{:03d}/{:03d}] Learing Rate: {:07f}".format(epoch, opt.epoch, get_learning_rate(optimizer)))
第一行代码是将learning rate 写入到tensorxboard里面
第二行代码是正常打印日志
看起来很正常的代码怎么会有问题,通过注释大法后发现,问题出在第一行将learning rate 写入到tensorxboard里面。
问题解决
1、注释掉第一行writer.add_scalar
但我还是想将学习率写到tensorxboard里面呀,怎么办?请看方法2
2、这是很神奇的解决办法,我通过将writer.add_scalar中Learning Rate改为LR就没有出现重复打印的问题
原因分析
目前没有时间去做,大神们如果知道欢迎指导下!!
启发
希望我的解决办法能给你提供一些启发。实在找不出问题,就注释大法,排查下,这是最笨,但是在毫无思绪下,最有效的办法。在没有思绪的情况,只能什么方法都试试!最后什么原因都有可能!
原创不容易,如果对你有所帮助,请赏一键三连!感谢!
你是一个可以影响我的人!你的认可是我创作的动力,非常感谢!
有问题,欢迎随时交流探讨!